Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改文件';s文件统计信息在C中_C_Linux_Stat - Fatal编程技术网

修改文件';s文件统计信息在C中

修改文件';s文件统计信息在C中,c,linux,stat,C,Linux,Stat,我正在编写一个程序,通过将多个文件合并为一个文件(很像winzip/7zip)来提高文件的可移植性 我的问题是:是否有任何方法可以在打包之前修改解包文件的文件统计信息以匹配这些数据?(不仅仅是时间。)主要的可直接更改的统计数据是用户和组权限,您可以通过chmod系统调用更改这些数据(请参阅)。可以使用chown()设置实际所有者和组-请注意,如果以超级用户(即root用户)身份运行,则只能更改所有者,或将组更改为当前用户不是其成员的组。可以使用utimes()设置时间。可以使用setxattr(

我正在编写一个程序,通过将多个文件合并为一个文件(很像winzip/7zip)来提高文件的可移植性


我的问题是:是否有任何方法可以在打包之前修改解包文件的文件统计信息以匹配这些数据?(不仅仅是时间。)

主要的可直接更改的统计数据是用户和组权限,您可以通过
chmod
系统调用更改这些数据(请参阅)。可以使用
chown
()设置实际所有者和组-请注意,如果以超级用户(即root用户)身份运行,则只能更改所有者,或将组更改为当前用户不是其成员的组。可以使用
utimes
()设置时间。可以使用
setxattr
()设置扩展文件属性(用于访问控制列表等)

其他文件属性-硬链接数、inode等-无法直接设置


在任何情况下,您都需要在归档文件时读取文件的属性,将其与文件内容和其他元数据一起序列化到归档文件中,并使用列出的系统调用在提取时还原这些属性。

没有自动实现这一点的方法;不同的文件系统支持不同的属性。您必须决定要支持哪些属性,读取它们(即使用
stat()
),将它们写入您的存档中的某个元数据部分,并在解包时手动恢复它们(很像
tar
处理这些属性的方式)。名义上,设置文件时间的首选调用是因为它允许您将时间设置为纳秒(这是名称的
ns
部分)。但是,某些文件系统和操作系统可能不支持文件的亚秒时间,并且许多程序在识别文件修改时间时不使用亚秒时间。