Используя C, как я могу узнать, когда создается файл?
Я делаю программу на C для Linux, которая сканирует каталог каждые x секунд в течение периода времени для изменений, но у меня возникают проблемы с поиском, когда создается файл или каталог. Вот несколько вариантов, которые я рассмотрел:
Используя структуру stat, проверьте, совпадают ли время последнего изменения состояния и времени изменения данных. Это поднимает проблему, заключающуюся в том, что вы можете создать файл, изменить его до того, как программа сможет проверить его, который изменяет метку времени изменения данных и больше не видит его как новый файл.
Ведите журнал имени каждого файла / каталога в каталоге и проверяйте наличие новых. Это проблема, когда вы удаляете файл, а затем создаете новый с тем же именем, он не интерпретируется как новый файл.
Ведите подсчет количества файлов / каталогов. Схожая проблема до последней идеи.
С учетом сказанного, кто-нибудь имеет представление о том, как я могу однозначно идентифицировать создание файла / каталога?
3 ответа
Вы не можете, по крайней мере, не таким образом. В POSIX нет условий для хранения времени создания файла в файловой системе, как в Windows и некоторых других ОС. Он сохраняет только время изменения статуса, доступа и модификации. Большинство файловых систем Unix также не хранят эту информацию.
Одной из причин этого является наличие жестких ссылок, поскольку временные метки файлов хранятся в своих инодах, а не в ссылках на каталоги. Что бы вы посчитали временем создания для файла, который был создан в 10:00 и затем жестко связан с другим каталогом в 11:00? Что делать, если файл скопирован?
Ваш лучший, но, к сожалению, специфичный для ОС подход заключается в использовании любой инфраструктуры, доступной на вашей платформе, для мониторинга событий файловой системы, например, inotify в Linux и kqueue во FreeBSD и MacOS X...
РЕДАКТИРОВАТЬ:
Кстати, Ext4fs в Linux хранит время создания инода (crtime
). К сожалению, получить эту информацию из пользовательского пространства все еще немного неудобно.