gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:11:47 25 4
gpt4 key购买 nike

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

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

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

告诉我如何创建匿名文件而不在磁盘目录结构中简要公开文件名的奖励积分。

最佳答案

A patch for a proposed Linux flink() system call几年前提交的,但是当Linus说"there is no way in HELL we can do this securely without major other incursions" ,这几乎结束了关于是否添加这个的争论。

更新:从 Linux 3.11 开始,现在可以使用 open() 创建没有目录条目的文件。与新 O_TMPFILE标志,并在完全形成后使用 linkat() 将其链接到文件系统中在 /proc/self/fd/ fd 与 AT_SYMLINK_FOLLOW旗帜。

以下示例在 open() 上提供手册页:

    char path[PATH_MAX];
fd = open("/path/to/dir", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);

/* File I/O on 'fd'... */

snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file", AT_SYMLINK_FOLLOW);

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

关于linux - 重新链接匿名(未链接但打开)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com