【发布时间】:2012-12-01 10:25:48
【问题描述】:
问题Getting Filename from file descriptor in C 的变体。这是关于 Linux 的。
如果我有一个引用常规文件的文件描述符,我可以通过给它一个新的文件名来“保存”文件描述符(当然,在它所在的同一设备上)?我正在寻找类似于 rename(2) 或 link(2) 的东西,但它会接受文件描述符作为输入而不是文件名。
rename(2) 和 link(2) 的问题在于,即使您可以尝试从文件描述符转到文件名,这也可能会失败。我正在更准确地考虑打开的文件描述符引用已经取消链接的文件的情况——在这种情况下,文件没有更多的名称。当我们 close() 文件描述符时,似乎没有办法阻止文件被删除。但我错了吗?我们可以使用 Posix 甚至 Linux API 重新命名吗?
更新:我们实际上可以在/proc/<pid>/fd/<fd> 中看到 Linux 上已删除文件的内容,尽管它看起来像是一个损坏的符号链接。但是,我们不能使用 link(2) 或 ln(1) 重新实现这样的文件,因为它认为我们正在尝试进行跨设备链接。
【问题讨论】:
-
但是您可以将内容从 fd/
文件中复制出来。愚蠢的是你不能重新链接它。 -
这里的答案基本相同:stackoverflow.com/q/4171713/4421