2011-04-12 51 views
3

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

从我的理解,st_atime当文件被访问的变化。当我们使用O_TRUNC标志打开或创建一个文件时,我们没有访问该文件吗?

+0

据我所知,只要打开一个文件(与任何标志)不更改时间,至少在Linux上。你能给出一个代码示例,发生这种情况吗? – 2011-04-12 08:23:46

回答

4

这个问题是有点老了,但至少子孙后代一个答案......

从统计(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。