前几天,我搜索并询问了一些关于文件不同时间戳的问题。
现在我知道我可以通过
creation time
获取 statx(2)
并通过 only
和 last (status change | modification | access) time
命令/实用程序更改 touch -m
文件的 debugfs
之一,而无需更改其他时间。
我想知道如何更改每个
last (status change | modification | access) time
而不更改其他时间only by system call
,而不是通过任何命令/实用程序。如果不可能,这些命令/实用程序如何做到这一点?
我知道
Criticism of atime.
futimens()
及其近亲futimensat()
:
#include <sys/stat.h>
int futimens(int fd, const struct timespec times[2]);
特别是,它们支持特殊时间值
UTIME_OMIT
来指示“不要更改此时间字段”。
这些函数使用
struct timespec
,其中有 tv_nsec
字段来记录纳秒。有一个较旧但可能更广泛使用的函数 utimes()
,它使用 struct timeval
值,并提供 tv_usec
来记录微秒。
这些功能允许您设置访问时间(a-time)和修改时间(m-time);他们不允许您设置“状态更改”时间(c-time)。没有简单的方法来设置 c-time — 它会由文件系统自动更新为当前时间。有关可能性的讨论,请参阅 Stack Overflow 上的设置创建或更改时间戳。如果系统有多个用户使用它,设置系统时间、更改文件和重置系统时间是一个令人震惊的“解决方案” - 即使您是唯一使用该机器的人,它也不是一个非常有吸引力的“解决方案” .