确切地说,我的意思是保留稀疏文件中的漏洞和所有扩展属性,以捕捉目标文件系统不支持或不完全支持它们的情况(例如不同的 EA 长度)?在挂载的 NTFS 文件系统上,它也应该与备用流一起使用。尽可能多地保留文件属性。
进度 GUI 也需要回调。这似乎很难维护,所以我想已经有一些东西可以使用,比如 Windows 上的 SHFileOperation。
我查看了 GLIB,他们以最简单的方式使用打开/读取/写入/关闭顺序进行操作。
sendfile根本不处理稀疏文件,至少在 Linux 4.4 和更早版本上是这样。从 Linux 4.5 开始,有一个新的系统调用copy_file_range为您隐藏了所有细节。
对于早期版本,这是我通过lseek和SEEK_HOLE复制带有孔的文件内容的工作示例。它与cp中的实现不同,后者从源读取所有内容并跳过全零块,因此在目标中创建孔但仍然浪费时间从源读取孔。但是,即使某些文件系统已经支持稀疏文件,它们也很可能不支持SEEK_HOLE,在这种情况下,我的代码最终会创建非稀疏文件。
至于扩展属性,你真的必须调用listxattr,然后自己通过getxattr / setxattr复制每个扩展属性。
Nano 时间戳可以通过utimensat /futimens*设置