提问人:programme3219873 提问时间:7/8/2022 最后编辑:Jonathan Lefflerprogramme3219873 更新时间:7/9/2022 访问量:393
如何更改文件时间戳,包括纳秒
how to change file timestamp including nanoseconds
问:
我正在制作一个程序将文件从源复制到目标目录,并希望更改目标文件时间戳,以便它们与源文件时间戳匹配。
到目前为止,我已经发现了 utime() 函数,并根据我想使用的时间操纵了结构。utimbuf
但是,时间不考虑纳秒。
例如:
如果我想复制“file1”并且它的时间戳为 123.213241,则在运行当前程序时,我的副本将有 123.000000。我想包括纳秒 .213241 等。
这是我到目前为止的代码:
struct stat buf;
struct utimbuf time;
stat(filename, &buf) // get metadata of file "filename" and then store in buf
time.actime = buf.st_atim.tv_sec; // set times in time struct
time.modtime = buf.st_mtim.tv_sec;
utime(filename_copy, &time); // load file copy with time struct
如何在文件时间戳中包含纳秒?
答:
4赞
Jonathan Leffler
7/8/2022
#1
根据 POSIX,您需要的函数是 utimensat()(
或其近亲 )。这两者都采用数组中的一对值,这允许您指定时间到纳秒。第一个要素是访问时间;二是修改时间。futimens()
struct timespec
并非所有文件系统都支持纳秒时间戳。并非所有系统实际上都支持纳秒分辨率——它们可能会四舍五入到最接近的微秒。
请注意,现代版本的 stat()
函数返回一个包含元素 、 和 的结构。这些也是值。<sys/stat.h>
定义了一些向后兼容的宏:st_atim
st_ctim
st_mtim
struct timespec
为了与本标准的早期版本兼容,宏应使用值 .同样,和 应分别定义为值为 和 的宏。
st_atime
st_atim.tv_sec
st_ctime
st_mtime
st_ctim.tv_sec
st_mtim.tv_sec
对于 Linux,参见 utimensat(2)。
然而,stat(2)
的文档只在底部附近的 Notes 部分提到了亚秒次数。要小心。
评论
st_atim.tv_sec
st_mtim.tv_sec