13

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

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

谢谢你的帮助。

4

4 回答 4

14

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
于 2009-03-16T18:58:07.700 回答
10

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

utime(filename, NULL);

文档说:

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

[...]

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

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

于 2009-03-16T18:55:00.953 回答
4

旧的utime()并且utimes()适用于许多用例,但是要更新atime&mtime具有现代系统所需的纳秒分辨率,请使用:

utimensat(0, path, NULL, 0);

这与 newer 结合使用非常有用,stat()后者也返回具有纳秒分辨率的struct timespec st_mtim字段。struct stat

于 2016-03-20T00:41:43.353 回答
1

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

于 2009-03-16T18:56:40.167 回答