Почему время изменения (ctime) каталога изменяется при создании нового файла в нем? - PullRequest
1 голос
/ 24 февраля 2020

В соответствии с документацией :

Время изменения (ctime) Это метка, когда метаданные файла были изменены, например, права доступа или владельца. В некоторых документах это также называется временем обновления.

Тем не менее, когда я создаю новый файл в каталоге и затем запускаю команду istat в каталоге, я замечаю, что ctime aka Время обновления каталога изменилось. Я думал, что ctime должно измениться только если вы измените метаданные каталога?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

В соответствии с stat () спецификацией системного вызова:

Функция stat () должна обновлять любые поля, связанные со временем (как описано в Обновлении времени файлов XBD), до запись в структуру статистики.

В соответствующем Обновлении Файлового Времени документ:

Каждая функция или утилита в POSIX.1-2017, которая читает или записывает данные (даже если данные не изменяются) или выполняет операцию по изменению состояния файла (даже если состояние файла не изменяется) указывает, какая из соответствующих меток времени должна быть помечена для обновления.

Список системных вызовов POSIX содержит следующие вызовы, связанные с созданием объектов внутри каталога:

  • ссылка ()

    После успешного завершения ссылка () должна пометить для обновления последнюю отметку времени изменения состояния файла. Кроме того, отметки времени последнего изменения данных и последнего изменения статуса файла в каталоге, содержащем новую запись, должны быть помечены для обновления.

  • mkdir ()

    После успешного завершения mkdir () должен пометить для обновления последний доступ к данным, последнее изменение данных и время последнего изменения состояния файла каталога. Кроме того, отметки времени последнего изменения данных и последнего изменения состояния файла каталога, содержащего новую запись, должны быть помечены для обновления.

  • mkfifo ()

    После успешного завершения mkfifo () помечает для обновления последний доступ к данным, последнее изменение данных и последние временные метки изменения статуса файла. Кроме того, отметки времени последнего изменения данных и последнего изменения состояния файла каталога, содержащего новую запись, должны быть помечены для обновления.

  • mknod ()

    После успешного завершения mknod () помечает для обновления последний доступ к данным, последнее изменение данных и последние временные метки изменения статуса файла. Кроме того, отметки времени последнего изменения данных и последнего изменения состояния файла каталога, содержащего новую запись, должны быть помечены для обновления.

  • open ()

    Если установлен O_CREAT и файл ранее не существовал, при успешном завершении open () должен пометить для обновления последний доступ к данным, последнее изменение данных и последние временные метки изменения статуса файла для файла. и отметки времени последнего изменения данных и последнего изменения состояния файла родительского каталога.

  • symlink ()

    По для успешного завершения symlink () должен пометить для обновления последний доступ к данным, последнее изменение данных и последние временные метки изменения статуса ссылки Symboli c. Кроме того, отметки времени последнего изменения данных и последнего изменения состояния файла каталога, содержащего новую запись, должны быть помечены для обновления.

0 голосов
/ 27 февраля 2020

Список подкаталогов содержится в файле, поэтому при обновлении файла в каталоге он обновляет метаданные в списке каталога для этого файла (mtime, et c). Следовательно, сам подкаталог является файлом, который был изменен.

...