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

pb3s4cty  于 2023-05-16  发布在  其他
关注(0)|答案(4)|浏览(228)

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

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

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
okxuctiv

okxuctiv2#

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

utime(filename, NULL);

医生说:

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

[...]
utime()系统调用将filename指定的inode的访问和修改时间分别更改为times的actime和modtime字段。
如果times为NULL,则文件的访问和修改时间设置为当前时间。

0x6upsns

0x6upsns3#

旧的utime()utimes()对于许多用例都是可以的,但是要以 * 纳秒分辨率 * 更新atimemtime,这是您在现代系统上所需要的,请用途:

utimensat(0, path, NULL, 0);

这在与较新的stat()结合使用时非常有用,后者也以纳秒分辨率返回struct stat中的struct timespecst_mtim字段。

gxwragnw

gxwragnw4#

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

相关问题