如何在POSIX中以编程方式编写文件修改日期?

时间:2009-03-16 18:41:40

标签: c unix file posix

我想从C代码触摸我的文件来修改他们的访问日期。这似乎不起作用:

struct stat fileSt;
lstat(path, &fileSt);
fileSt.st_mtime = time(NULL);

感谢您的帮助。

4 个答案:

答案 0 :(得分:11)

utimes()可能是怎么做的。 utime()已经过时了。

使用像strace这样的工具确定这样的事情是微不足道的。

strace touch -t 01010911 xxx
.
.
open("xxx", O_WRONLY|O_NONBLOCK|O_CREAT|O_NOCTTY|O_LARGEFILE, 0666) = 0
utimes("/proc/self/fd/0", {1230829860, 0}) = 0

答案 1 :(得分:8)

我想你想要utime(2)。这应该足够了:

utime(filename, NULL);

文档说:

int utime(const char *filename, const struct utimbuf *times);
     

[...]

     

utime()系统调用会更改访问和修改时间   inode由filename指定为actime和modtime字段的时间   分别

     

如果时间是NULL,那么文件的访问和修改时间是   设置为当前时间。

答案 2 :(得分:2)

旧版\ hello \utime()适用于多种用例,但更新utimes()&在现代系统上需要纳秒分辨率atime,使用:

mtime

这与较新的utimensat(0, path, NULL, 0); 结合使用非常有用,stat()会在struct timespec中返回st_mtim struct stat字段,并且还具有纳秒分辨率。

答案 3 :(得分:1)

我认为您需要查看utime()/ utimes()系统调用。不是在我的普通电脑上,所以我无法查看我害怕的细节。