我想从 C 代码中触摸我的文件以修改它们的访问日期。这似乎不起作用:
struct stat fileSt;
lstat(path, &fileSt);
fileSt.st_mtime = time(NULL);
谢谢你的帮助。
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
我想你想要utime(2)
。这应该足够了:
utime(filename, NULL);
文档说:
int utime(const char *filename, const struct utimbuf *times);
[...]
utime() 系统调用将filename 指定的inode 的访问和修改时间分别更改为时间的actime 和modtime 字段。
如果 times 是
NULL
,则文件的访问和修改时间设置为当前时间。
旧的utime()
并且utimes()
适用于许多用例,但是要更新atime
&mtime
具有现代系统所需的纳秒分辨率,请使用:
utimensat(0, path, NULL, 0);
这与 newer 结合使用非常有用,stat()
后者也返回具有纳秒分辨率的struct timespec
st_mtim
字段。struct stat
我认为您需要查看 utime()/utimes() 系统调用。不是在我的普通电脑上,所以我担心无法查看详细信息。