gpt4 book ai didi

c++ - 如何从 C++ 代码使用 BTRFS 的写时复制?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:40 25 4
gpt4 key购买 nike

如何使用 C++ 在 BTRFS 文件系统中的文件上使用写时复制从假定支持它的 Linux 系统上的 C++ 代码复制文件?该解决方案是否对所有 Unix 系统通用?

CoW 根本不包含在文件系统的 C++ 标准的任何部分中。它既不存在于 Linux 的文档中,也不是 POSIX 标准。

事实上,即使 GNU cp 实用程序可以处理写时复制,它可能并不总是执行,因为它需要一个参数,即 --reflink=true 来强制使用它

因此,使用 CoW 很可能需要使用低级原语,显然没有为 Linux 或更广泛的 POSIX 准备文档。

最佳答案

您可以使用 strace 查看 cp --reflink=always notes.txt notes.txt.backup 执行了哪些系统调用。

因此,如果您运行 strace cp --reflink=always notes.txt notes.txt.backup,您可以在输出中找到:

openat(AT_FDCWD, "notes.txt", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0664, st_size=760, ...}) = 0
openat(AT_FDCWD, "notes.txt.backup", O_WRONLY|O_TRUNC) = 4
fstat(4, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
ioctl(4, BTRFS_IOC_CLONE or FICLONE, 3) = 0

ioctl 调用是创建文件显式 CoW 拷贝的 CoW 魔法。

你可以阅读man ioctl_ficlone

关于c++ - 如何从 C++ 代码使用 BTRFS 的写时复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52766388/

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