如果指向的文件被移动,那么Linux上的打开文件句柄会发生什么

如果指向的文件被移动,那么Linux上的打开文件句柄会发生什么

如果指向文件同时获得Linux上的打开文件句柄会发生什么:

  • 搬走了 - >文件句柄是否保持有效?

  • 已删除 - >这是否会导致EBADF,表明文件句柄无效?

  • 替换为新文件 - >文件句柄是否指向此新文件?

  • 替换为新文件的硬链接 - >我的文件是否处理“关注”此链接?

  • 替换为新文件的软链接 - >我的文件句柄现在是否触及此软链接文件?

为什么我问这样的问题:我使用的是热插拔硬件(如USB设备等)。可能发生的是,设备(及其/ dev /文件)被用户或另一个Gremlin重新附加。

处理这个问题的最佳做法是什么?


小唯快跑啊
浏览 806回答 3
3回答

白猪掌柜的

文件句柄指向inode而不是路径,因此大多数场景仍然可以正常工作,因为句柄仍然指向文件。具体来说,使用删除方案 - 由于某种原因,该函数被称为“取消链接”,它会破坏文件名(dentry)和文件之间的“链接”。当您打开文件,然后取消链接时,文件实际上仍然存在,直到其引用计数变为零,即关闭句柄时。编辑:对于硬件,您已打开特定设备节点的句柄,如果拔出设备,内核将无法访问所有设备,即使设备返回也是如此。您必须关闭设备并重新打开它。

SMILET

我不确定其他操作,但是对于删除:删除根本不会发生(物理上,即在文件系统中),直到文件的最后一个打开句柄被关闭。因此,不应该从您的应用程序下删除文件。一些应用程序(不会想到)依赖于这种行为,通过创建,打开和立即删除文件,这些文件与应用程序完全一样长 - 允许其他应用程序知道第一个应用程序的生命周期而无需看一下流程图等。类似的考虑可能适用于其他东西。
打开App,查看更多内容
随时随地看视频慕课网APP