文件创建/打开对st_mtime和st_atime的影响

nit*_*ian 4 unix file-io

当我创建或使用UNIX打开一个文件O_CREAT标志,st_mtimest_ctimest_atime的文件更改。但是,当我使用O_TRUNC标志创建或打开文件时,只有st_mtime和会st_ctime更改,而不会更改st_atime

据我了解,st_atime访问文件时会发生变化。当我们使用O_TRUNC标志打开或创建文件时,是否不访问文件?

jma*_*jma 5

这个问题有点老了,但至少对后代来说是一个答案。

从stat(2)手册页(在具有Linux 2.6.32内核的主机上):

字段st_atime通过文件访问来更改,例如,通过execve(2),mknod(2),pipe(2),utime(2)和read(2)(大于零字节)进行更改。其他例程,例如mmap(2),可能会也可能不会更新st_atime。

字段st_mtime通过文件修改(例如,大于零字节的mknod(2),truncate(2),utime(2)和write(2))进行更改。而且,目录的st_mtime通过在该目录中创建或删除文件来更改。对于所有者,组,硬链接数或模式的更改,不会更改st_mtime字段。

通过写入或设置索引节点信息(即所有者,组,链接计数,模式等)来更改字段st_ctime。