gpt4 book ai didi

c - 如何从 c 程序准确复制 linux 上的文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:18 25 4
gpt4 key购买 nike

我的意思是保留稀疏文件中的漏洞和所有扩展属性捕获目标文件系统不支持它们或不完全支持它们的情况(例如不同的 EA 长度)?在挂载的 NTFS 文件系统上,它也应该与备用流一起工作。尽可能多地保留文件属性。

也需要进度 GUI 的回调。这似乎很难维护,所以我猜已经有一些东西可以使用,比如 Windows 上的 SHFileOperation。

我查看了 GLIB,他们正在以最简单的方式使用打开/读取/写入/关闭顺序进行操作。

最佳答案

sendfile 根本不处理稀疏文件,至少在 Linux 4.4 及更早版本上是这样。从 Linux 4.5 开始有一个新的系统调用 copy_file_range这为您隐藏了所有详细信息。

对于早期版本,这里是 my working example通过 lseekSEEK_HOLE 复制带有漏洞的文件内容。它不同于 cp 中的实现,后者从源读取所有内容并跳过全零 block ,因此在目标中创建漏洞但仍然浪费时间从源读取漏洞。但是,某些文件系统很可能不支持 SEEK_HOLE,即使它们已经支持稀疏文件,在这种情况下,我的代码最终会创建非稀疏文件。

至于扩展属性,你真的必须调用listxattr,然后自己通过getxattr/setxattr复制每个扩展属性。

纳米时间戳可以通过utimensat/futimens*

设置

关于c - 如何从 c 程序准确复制 linux 上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530930/

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