我想从C代码 * 触摸 * 我的文件以修改它们的访问日期。这似乎不起作用:
struct stat fileSt; lstat(path, &fileSt); fileSt.st_mtime = time(NULL);
ckx4rj1h1#
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
okxuctiv2#
我想你想要utime(2)。这应该足够了:
utime(2)
utime(filename, NULL);
医生说:
int utime(const char *filename, const struct utimbuf *times);
[...]utime()系统调用将filename指定的inode的访问和修改时间分别更改为times的actime和modtime字段。如果times为NULL,则文件的访问和修改时间设置为当前时间。
NULL
0x6upsns3#
旧的utime()和utimes()对于许多用例都是可以的,但是要以 * 纳秒分辨率 * 更新atime和mtime,这是您在现代系统上所需要的,请用途:
utime()
utimes()
atime
mtime
utimensat(0, path, NULL, 0);
这在与较新的stat()结合使用时非常有用,后者也以纳秒分辨率返回struct stat中的struct timespecst_mtim字段。
stat()
struct stat
struct timespec
st_mtim
gxwragnw4#
我认为您需要查看utime()/utimes()系统调用。不是在我的普通电脑,所以我不能查找细节,我害怕。
4条答案
按热度按时间ckx4rj1h1#
utimes()可能是这样做的。utime()已过时。
使用strace之类的工具来确定这样的事情是微不足道的。
okxuctiv2#
我想你想要
utime(2)
。这应该足够了:医生说:
[...]
utime()系统调用将filename指定的inode的访问和修改时间分别更改为times的actime和modtime字段。
如果times为
NULL
,则文件的访问和修改时间设置为当前时间。0x6upsns3#
旧的
utime()
和utimes()
对于许多用例都是可以的,但是要以 * 纳秒分辨率 * 更新atime
和mtime
,这是您在现代系统上所需要的,请用途:这在与较新的
stat()
结合使用时非常有用,后者也以纳秒分辨率返回struct stat
中的struct timespec
st_mtim
字段。gxwragnw4#
我认为您需要查看utime()/utimes()系统调用。不是在我的普通电脑,所以我不能查找细节,我害怕。