从 C 中的文件描述符获取文件名问题的变体。这是关于 Linux 的。
如果我有一个引用常规文件的文件描述符,我可以通过给它一个新的文件名来“保存”文件描述符(当然,在它所在的同一设备上)?我正在寻找类似于 rename(2) 或 link(2) 的东西,但它会接受文件描述符作为输入而不是文件名。
rename(2) 和 link(2) 的问题在于,即使您可以尝试从文件描述符转到文件名,这也可能会失败。我正在更准确地考虑打开的文件描述符引用已经取消链接的文件的情况——在这种情况下,文件没有更多的名称。当我们关闭()文件描述符时,似乎没有办法阻止文件被删除。但我错了吗?我们可以使用 Posix 甚至 Linux API 重新命名吗?
更新:我们实际上可以在 Linux 中看到已删除文件的内容/proc/<pid>/fd/<fd>
,即使它看起来像一个损坏的符号链接。但是,我们不能使用 link(2) 或 ln(1) 来重新实现这样的文件,因为它认为我们正在尝试进行跨设备链接。