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



当我在UNIX中使用O_CREAT标志创建或打开文件时,st_mtime, st_ctimest_atime的文件发生了变化。但是,当我使用O_TRUNC标志创建或打开文件时,只有st_mtimest_ctime改变,而不是st_atime

根据我的理解,st_atime在文件被访问时发生变化。当我们使用O_TRUNC标志打开或创建文件时,我们是否没有访问该文件?

这个问题有点老了,但至少是给后代的答案…

从stat(2) man page(在linux 2.6.32内核的主机上):

字段st_atime被文件访问改变,例如:execve(2), mknod(2), pipe(2),Utime(2)和read(2)(大于0字节)。其他例程,如mmap(2),可能是也可能不是更新st_atime。

字段st_mtime通过文件修改来改变,例如:mknod(2), truncate(2),Utime(2)和write(2)(大于0字节)。目录的st_mtime被修改为在该目录中创建或删除文件。st_mtime字段不会因为变化而改变在owner, group, hard link count, or mode.

字段st_ctime可以通过写入或设置inode信息(即owner、group、link)来改变计数、模式等)。

最新更新