當我在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