3

unix がファイル作成時刻を保存しない理由を誰か教えてもらえますか? 修正時間、変更時間、アクセス時間は保存されますが、作成時間は保存されないので、それほど大きな負担ですか?具体的な理由はありますか?

または、いくつかの言語(任意のプログラミング言語)といくつかのシステムコールを使用して、ファイル作成時間を取得できますか?

4

4 に答える 4

5

そのような情報は inode に保存する責任があるため、ファイル システム自体の制限になると思います。簡単にグーグル検索すると、ext4 ファイル システムがそのファイル属性のストレージを i ノードに追加していることがわかりました。

ext4 タイムスタンプ

于 2012-04-16T08:58:34.070 に答える
3

Unixが作成時間を保存しない主な理由は、ファイルの作成日を設定する標準的な定義がないため、この情報については議論の余地があるためです。

一部の人々は、この作成時間をデータが作成された時間を表し(たとえば、jpeg写真が撮影された)、ファイルがバックアップからコピーまたは復元されたときに保存されることを望んでいます。一方、他の人の中には、この作成時間をファイルシステムオブジェクト(例:iノード)が作成される時間にすることを好む人もいます。

前者は、実行されると、通常、ファイル内に表示されます(例:EXIF)。

後者は、最近のファイルシステムが提供するものです。

  • UFS2 / st_birthtime
  • ZFS / crtime
  • Ext4 / crtime
  • btrfs / otime
  • HFS + /?

この作成時間を保存するために使用されるフィールドに名前を付けることに同意していないことに注意してください。

于 2012-04-16T10:13:12.897 に答える
1

WhiteboardDevが指摘しているように、最新のファイルシステムの多くはファイル作成時刻を保存してますが、標準ではないため、詳細にアクセスする方法はさまざまです。

その具体的な理由については、基本的には歴史的なものです。これらの API の多くが最初に定義された 70 年代に、あまりにも多くのメタデータを保存するのは本当に負担でした。(現在のファイルシステムは常に「最終アクセス時刻」を更新するとは限らないことに注意してください。これは負担になるためです... )

于 2012-04-16T09:12:49.507 に答える
1

ファイルが変更されるか、その所有者が変更されると、stat は変更 st_ctime を返します。ファイルが変更されるか、その所有者が変更されると、すべての賭けがコンテンツにオフになります dos/nt は、ファイルを完全に破棄し、コマンド内でファイル全体を書き換えることができるため、この点で信頼できません。シェルと作成時間は変わりません

UNIX のファイルに関連付けられたメタデータは、元の作成時刻を保証しませんが、最新バージョンの作成時刻を保持します。ファイルにバージョンを付ける必要がある場合は、バージョンを外部または内部で明示する必要があります

フィールド st_ctime は、inode 情報 (つまり、所有者、グループ、リンク数、モードなど) の書き込みまたは設定によって変更されます。

        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 */
       };
于 2012-04-16T09:13:06.193 に答える