Вопрос по unix – Время создания файла в Unix

3

Может кто-нибудь сказать мне, почему Unix не хранит время создания файла? Это такая большая нагрузка на него, поскольку он хранит время модификации, время изменения и время доступа, но не время создания? Есть ли какая-то конкретная причина для этого?

или это через какой-то язык (любой язык программирования) и некоторые системные вызовы, можем ли мы как-то получить время создания файла?

Если данные inode (например, владелец, групповой режим и т. Д.) Не изменены, для этого можно использовать поле «ctime» (если оно существует). Some programmer dude

Ваш Ответ

4   ответа
1

WhiteboardDev отмечает, много современных файловых системделат сохранить время создания файла, но оно не является стандартным, поэтому метод доступа к деталям может быть разным.

Что касается конкретной причины, это в основном историческое. Это реальнобы бремя хранения слишком большого количества метаданных в семидесятых годах, когда многие из этих API были впервые определены. (Стоит отметить, что современные файловые системы не всегда обновляют «время последнего доступа», потому чточт это бремя ...)

Привет, Стивен, не могли бы вы дать ссылку на различные методы, используемые для получения даты создания, это было бы здорово! Сейчас я их ищу. редактировать: ах я думаю, @jlliagre перечислил их это правда? Stackoverflow.com / а / 10172234/1828637 Noitidart
3

по которой Unix не хранит время создания, заключается в том, что эта информация противоречива, поскольку не существует стандартного определения того, какую дату создания файла следует установить.

Некоторые люди хотели бы, чтобы это время создания представляло время, когда были созданы данные (например, снимок в формате JPEG) и, таким образом, сохранялось, когда файл копируется или восстанавливается из резервной копии. С другой стороны, некоторые другие люди предпочитают, чтобы это время создания было временем создания объекта файловой системы (например, inode).

Первый из них, как правило, появляется внутри файла (например, EXIF).

Последнее - это то, что предоставляют современные файловые системы:

UFS2 / st_birthtimeZFS / crtime Ext4 / crtimebtrfs / otime HFS + /?

Обратите внимание, что нет соглашения по названию поля, используемого для хранения этого времени создания.

Hi jilliagre это потрясающе, спасибо, что поделились! Прошло уже пару лет с тех пор, как я опубликовал этот пост. Мне было интересно, можете ли вы обновить его, добавив любую новую информацию, например, если вы знаете метод для HFS + и есть ли другие файловые системы, о которых вы узнали? Спасибо! Noitidart
5

что подобная информация является обязанностью inode хранить и, следовательно, является ограничением самой файловой системы. Быстрый поиск в Google, и оказывается, что файловая система ext4 добавила хранилище для этого атрибута файла в своем inode.

ext4 отметки времени

1

как только файл будет изменен, или его владелец изменит свое происхождение, поэтому все ставки на содержание отменены, так как dos / nt ненадежны, так как вы можете полностью удалить файл, полностью переписав его в течение командная оболочка и время создания не изменится

Метаданные, связанные с файлом в Unix, не гарантируют первоначальное время создания, но сохраняют время создания последней версии. Если вам нужно создать версию ваших файлов, тогда версия должна быть сделана явной внешней или внутренней

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

        struct stat {
           dev_t     st_dev;     /* ID of device containing file */
           ino_t     st_ino;     /* inode number */
           mode_t    st_mode;    /* protection */
           nlink_t   st_nlink;   /* number of hard links */
           uid_t     st_uid;     /* user ID of owner */
           gid_t     st_gid;     /* group ID of owner */
           dev_t     st_rdev;    /* device ID (if special file) */
           off_t     st_size;    /* total size, in bytes */
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */
       };
Привет, Пэдди, ты хочешь сказать, чтоst_ctime, «время последнего изменения статуса», это надежный способ узнать время рождения? Noitidart
st_ctime записывает, когда есть изменения в структуре статистики inode (например, размер файла или биты режима). «С» означает статусc, не файлc Reate. mrm

Похожие вопросы