gpt4 book ai didi

linux - 从 Unix 上的文件句柄创建硬链接(hard link)?

转载 作者:IT王子 更新时间:2023-10-29 00:18:34 25 4
gpt4 key购买 nike

如果我有一个打开文件的句柄,是否可以在从文件系统中删除对该文件的所有引用后创建该文件的硬链接(hard link)?

例如,像这样的:

fd = fopen("/tmp/foo", "w");
unlink("/tmp/foo");
fwrite(fd, "Hello, world!\n");
create_link_from_fd(fd, "/tmp/hello");
fclose(fd);

具体来说,我想这样做,以便我可以安全地写入大型数据文件,然后以原子方式将它们移动到位,而不必担心如果我的程序在写入文件的过程中被杀死,我会自己清理.

最佳答案

新发布的 linux 3.11 使用新的 O_TMPFILE open(2) 标志解决了这个问题。使用此标志,您可以在某些文件系统(由该文件系统中的目录指定)中创建一个“不可见”文件(即没有硬链接(hard link)的 inode )。然后,在文件完全设置后,您可以使用 linkat 创建硬链接(hard link)。它是这样工作的:

fd = open("/tmp", O_TMPFILE | O_RDWR, 0600);
// write something to the file here
// fchown()/fchmod() it
linkat(fd, "", AT_FDCWD, "/tmp/test", AT_EMPTY_PATH);

请注意,除了 >=3.11 内核要求外,这还需要底层文件系统的支持(我在 ext3 上尝试了上面的代码片段并且它有效,但它似乎不适用于 btrfs)。

关于linux - 从 Unix 上的文件句柄创建硬链接(hard link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127522/

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