当我在UNIX中使用O_CREAT
标志创建或打开文件时,st_mtime
, st_ctime
和st_atime
的文件发生了变化。但是,当我使用O_TRUNC
标志创建或打开文件时,只有st_mtime
和st_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)来改变计数、模式等)。