当我使用O_CREAT
标志在UNIX中创建或打开文件时,文件的st_mtime
,st_ctime
和st_atime
会发生变化。但是,当我使用O_TRUNC
标记创建或打开文件时,只有st_mtime
和st_ctime
更改而不是st_atime
。
根据我的理解,st_atime
会在访问文件时发生更改。当我们使用O_TRUNC标志打开或创建文件时,我们是否不访问该文件?
答案 0 :(得分:4)
这个问题有点陈旧,但至少是对后代的答案......
来自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字段 在所有者,组,硬链接计数或模式中。
通过写入或设置inode信息(即所有者,组,链接)来更改字段st_ctime 计数,模式等。)。