2011-08-26 8 views

答えて

11

二解像度の時間がフィールドにあります。

  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 */ 

しかし、男http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.htmlの "NOTES" セクションは言う:カーネル2.5.48以降

、stat構造体は、ナノ秒の解像度をサポートしています3つのファイルのタイムスタンプフィールドに適用されます。 Glibcは_BSD_SOURCEまたは _SVID_SOURCEフィーチャテストマクロが定義されている場合は、各 フィールドのナノ秒コンポーネントをst_atim.tv_nsecという形式の名前で公開します。これらのフィールドは POSIX.1-2008で指定され、バージョン2.12からglibcは_POSIX_C_SOURCEが値が200809L以上、または _XOPEN_SOURCEが値700以上で定義されている場合、これらのフィールド の名前も公開します。前述のマクロが のいずれも定義されていない場合、ナノ秒の値は の形式の名前st_atimensecで公開されます。

だから、時間のナノ秒の部分は同じ「構造体スタット」にあります(/usr/include/asm/stat.h)

unsigned long st_atime_nsec; 

unsigned int st_mtime_nsec; 

unsigned long st_ctime_nsec; 

#define STAT_HAVE_NSEC 1 
+1

だから、私は私のプログラムがポータブルになりたい場合は、 'st_atim.tv_nsec'か' st_atimensec'のどちらを使うべきですか? – musiphil

+0

NetBSDおよびOSX固有の実装*(ナノ秒をサポートしますが、異なるタイプの広告名を使用する)*と互換性を持たせるには? – user2284570