Влияние создания / открытия файла на st_mtime и st_atime - PullRequest
4 голосов
/ 12 апреля 2011

Когда я создаю или открываю файл в UNIX с использованием флага O_CREAT, st_mtime, st_ctime и st_atime файла изменяются. Но когда я создаю или открываю файл, используя флаг O_TRUNC, меняются только st_mtime и st_ctime, а не st_atime.

Насколько я понимаю, st_atime изменяется при доступе к файлу. Когда мы открываем или создаем файл, используя флаг O_TRUNC, мы не обращаемся к файлу?

1 Ответ

4 голосов
/ 06 января 2012

Этот вопрос немного старый, но ответ для будущих поколений, по крайней мере ...

со страницы руководства 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 не изменяется для изменений в владельце, группе, количестве жестких ссылок или режиме.

Поле st_ctime изменяется путем записи или установки информации об узле (то есть, владелец, группа, ссылка количество, режим и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...