重新链接匿名(未链接但已打开)文件

在Unix中,可以创建匿名文件的句柄,例如,使用creat()创建并打开匿名文件,然后使用unlink()删除目录链接-留下一个带有inode和存储的文件,但无法重新打开它。这些文件通常用作临时文件(通常这是tmpfile()返回给您的)

我的问题:有没有办法将这样的文件重新附加到目录结构中?如果您可以这样做,这意味着您可以(例如)实现文件写入,以便文件以原子方式显示并完全形成。这吸引了我强迫性的整洁

在浏览相关的系统调用函数时,我希望找到一个名为flink()的link()版本(与chmod()/fchmod()相比),但至少在Linux上不存在这种版本

告诉我如何创建匿名文件而不在磁盘目录结构中短暂公开文件名的好处

几年前提交了一个Linuxflink()系统调用的补丁,但当Linus声明“在没有其他重大入侵的情况下,我们无法安全地实现这一点”时,这几乎结束了关于是否添加此功能的辩论

更新:从Linux 3.11开始,现在可以使用带有新的O\u TMPFILE标志的open()创建一个没有目录项的文件,并在文件完全形成后,使用/proc/self/fd//code>fdAT\u SYMLINK\u FOLLOW标志将其链接到文件系统中

open()手册页面提供了以下示例:

字符路径[path_MAX];
fd=开放(“/path/to/dir”,O|TMPFILE | O|RDWR,S|IRUSR | S|IWUSR);
/*“fd”上的文件I/O*/
snprintf(path,path_MAX,“/proc/self/fd/%d”,fd);
linkat(在_FDCWD,path,在_FDCWD,“/path/for/file”,在_SYMLINK\u FOLLOW);

请注意,linkat()将不允许在使用unlink()删除最后一个链接后重新附加打开的文件

发表评论