当我在UNIX中使用O_CREAT
标志创建或打开文件时,st_mtime
,st_ctime
和st_atime
的文件发生更改。但是,当我创建或使用O_TRUNC
标志,只有st_mtime
和st_ctime
的变化,而不是st_atime
打开一个文件。文件创建/打开对st_mtime和st_atime的影响
从我的理解,st_atime
当文件被访问的变化。当我们使用O_TRUNC标志打开或创建一个文件时,我们没有访问该文件吗?
当我在UNIX中使用O_CREAT
标志创建或打开文件时,st_mtime
,st_ctime
和st_atime
的文件发生更改。但是,当我创建或使用O_TRUNC
标志,只有st_mtime
和st_ctime
的变化,而不是st_atime
打开一个文件。文件创建/打开对st_mtime和st_atime的影响
从我的理解,st_atime
当文件被访问的变化。当我们使用O_TRUNC标志打开或创建一个文件时,我们没有访问该文件吗?
这个问题是有点老了,但至少子孙后代一个答案......
从统计(2)手册页(使用Linux 2.6.32内核的主机上):
场st_atime的更改是由文件访问改变,例如,通过execve的(2),用mknod(2),管(2), UTIME(2)和读(大于零个字节)(2)。其他例程(如mmap(2))可能会或可能不会 更新st_atime。
字段st_mtime通过文件修改(例如mknod(2),truncate(2), utime(2)和write(2)(大于零字节))进行更改。而且,目录的st_mtime被 更改为在该目录中创建或删除文件。所有者,组,硬链接数或模式中的更改 的st_mtime字段不会更改。
通过写入或通过设置inode信息(即所有者,组,链接 计数,模式等)来更改字段st_ctime。
据我所知,只要打开一个文件(与任何标志)不更改时间,至少在Linux上。你能给出一个代码示例,发生这种情况吗? – 2011-04-12 08:23:46