为打开的文件描述符创建文件名

为打开的文件描述符创建文件名

我在文件系统上有一个文件。我正在使用函数打开文件open(2)以获取该文件的文件描述符。

现在我删除该文件。但我仍然拥有文件描述符,因此我可以毫无问题地读取和写入该文件,因为文件系统在关闭最后一个文件描述符之前不会删除我的文件的文件分配。

但是,在删除文件后,当我仍然保留文件描述符时,我可以以某种方式重新创建(重新绑定)文件名到该文件描述符吗?那么该文件会再次出现在文件系统上,因此当我关闭文件描述符时它不会被删除? (我所拥有的只是一个打开的文件描述符,没有其他任何东西)。

我最感兴趣的是这是否可以在 macOS 上完成(在 Linux/glibc 上似乎可以通过使用linkatAT_EMPTY_PATH标志来完成)。

答案1

正如你提到的,linkat在Linux上允许使用 来完成此操作AT_EMPTY_PATH,但仅限于特权进程。 (手册页和当前实现之间存在一些差异;请参阅flink引入“ ”的提交提交恢复它详细信息。)也可以通过 来完成/proc

macOS 版本linkat不支持这一点,而且我不知道有任何其他方法可以实现这一点。

相关内容