如何在 Linux (UNIX) 中仅更改最后一次(更改 | 修改 | 访问)时间之一?

问题描述 投票:0回答:1

前几天,我搜索并询问了一些关于文件不同时间戳的问题。

现在我知道我可以通过

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.

c linux libc
1个回答
1
投票

该作业的 POSIX 函数是

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 上的设置创建或更改时间戳。如果系统有多个用户使用它,设置系统时间、更改文件和重置系统时间是一个令人震惊的“解决方案” - 即使您是唯一使用该机器的人,它也不是一个非常有吸引力的“解决方案” .

© www.soinside.com 2019 - 2024. All rights reserved.