.\" t
.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
-.\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
+.\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH STAT 2 2012\-11\-11 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1998-1999 HANATAKA Shinya
+.\" and Copyright (c) 2005-2008 Akihiro MOTOKI
+.\" Translated 1998-06-21, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Modified 1999-04-16, HANATAKA Shinya
+.\" Updated 2000-01-03, Kentaro Shirakata <argrath@ub32.org>
+.\" Updated 2000-10-06, Kentaro Shirakata
+.\" Updated 2001-04-09, Kentaro Shirakata
+.\" Updated 2001-06-25, Kentaro Shirakata
+.\" Updated 2005-02-28, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2005-09-06, Akihiro MOTOKI
+.\" Updated 2005-11-19, Akihiro MOTOKI, catch up to LDP v2.14
+.\" Updated 2006-07-21, Akihiro MOTOKI, LDP v2.36
+.\" Updated 2007-06-13, Akihiro MOTOKI, LDP v2.55
+.\" Updated 2008-09-19, Akihiro MOTOKI, LDP v3.08
+.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH STAT 2 2014\-05\-10 Linux "Linux Programmer's Manual"
.SH 名前
-stat, fstat, lstat \- ファイルの状態を取得する
+stat, fstat, lstat, fstatat \- ファイルの状態を取得する
.SH 書式
+.nf
\fB#include <sys/types.h>\fP
.br
\fB#include <sys/stat.h>\fP
.br
\fB#include <unistd.h>\fP
.sp
-\fBint stat(const char *\fP\fIpath\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
+\fBint stat(const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
.br
\fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
.br
-\fBint lstat(const char *\fP\fIpath\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
+\fBint lstat(const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
+.sp
+\fB#include <fcntl.h> \fP/* AT_* 定数の定義 */
+\fB#include <sys/stat.h>\fP
+.sp
+\fBint fstatat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB,\fP
+\fB int \fP\fIflags\fP\fB);\fP
+.fi
.sp
.in -4n
glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
.sp
\fBlstat\fP():
.RS 4
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
+/* glibc 2.19 以前 */ _BSD_SOURCE ||
+.br
+/* glibc 2.20 以降 */_DEFAULT_SOURCE ||
+.br
+_XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
.br
|| /* glibc 2.10 以降: */ _POSIX_C_SOURCE\ >=\ 200112L
.RE
+.sp
+\fBfstatat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP 4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP
+glibc 2.10 より前:
+_ATFILE_SOURCE
+.RE
.PD
.ad
.SH 説明
.PP
-これらの関数はファイルについての情報を返す。
-ファイルそのものに対するアクセス許可は必要としないが、
-\(em\fBstat\fP() と \fBlstat\fP() の場合には \(em
-そのファイルへ至る \fIpath\fP を構成する全てのディレクトリに対する
-実行 (検索) 許可が必要である。
+これらの関数は、ファイルについての情報を \fIstat\fP が指すバッファに格納して返す。 ファイルそのものに対するアクセス許可は必要としないが、
+\(em\fBstat\fP(), \fBfstatat\fP(), \fBlstat\fP() の場合には \(emそのファイルへ至る \fIpathname\fP
+を構成する全てのディレクトリに対する実行 (検索) 許可が必要である。
.PP
-\fBstat\fP() は \fIpath\fP で指定されたファイルの状態を取得して \fIbuf\fP へ格納する。
+\fBstat\fP() と \fBfstatat\fP() は \fIpathname\fP が指すファイルに関する情報を取得する。 \fBfstatat\fP()
+の違いについては後で説明する。
-\fBlstat\fP() は \fBstat\fP() と同じであるが、 \fIpath\fP がシンボリックリンクの場合、リンクが参照しているファイルではなく、
-ã\83ªã\83³ã\82¯è\87ªèº«ã\81®ç\8a¶æ\85\8bã\82\92å\8f\96å¾\97ã\81\99ã\82\8b点が異なる。
+\fBlstat\fP() は \fBstat\fP() と同じであるが、 \fIpathnames\fP
+ã\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\81®å ´å\90\88ã\80\81ã\83ªã\83³ã\82¯ã\81\8cå\8f\82ç\85§ã\81\97ã\81¦ã\81\84ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81§ã\81¯ã\81ªã\81\8fã\80\81 ã\83ªã\83³ã\82¯è\87ªèº«ã\81®ç\8a¶æ\85\8bã\82\92è¿\94ã\81\99点が異なる。
-\fBfstat\fP() ã\81¯ \fBstat\fP() ã\81¨å\90\8cã\81\98ã\81 ã\81\8cã\80\81 ç\8a¶æ\85\8bã\82\92å\8f\96å¾\97ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ \fIfd\fP ã\81§æ\8c\87å®\9aã\81\99る。
+\fBfstat\fP() ã\81¯ \fBstat\fP() ã\81¨å\90\8cã\81\98ã\81 ã\81\8cã\80\81 ç\8a¶æ\85\8bã\82\92å\8f\96å¾\97ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ \fIfd\fP ã\81§æ\8c\87å®\9aã\81\99ã\82\8bç\82¹ã\81\8cç\95°ã\81ªる。
.PP
これらのシステムコールはいずれも、結果を \fIstat\fP 構造体に入れて返す。 \fIstat\fP 構造体には以下のフィールドが含まれている:
.PP
blksize_t st_blksize; /* ファイルシステム I/O での
ブロックサイズ */
blkcnt_t st_blocks; /* 割り当てられた 512B のブロック数 */
- time_t st_atime; /* 最終アクセス時刻 */
- time_t st_mtime; /* 最終修正時刻 */
- time_t st_ctime; /* 最終状態変更時刻 */
+};
+
+ /* Linux 2.6 以降では、カーネルは以下のタイムスタンプ
+ フィールドでナノ秒の精度をサポートしている。
+ Linux 2.6 より前のバージョンでの詳細は
+ 下記の「注意」を参照。 */
+
+ struct timespec st_atim; /* 最終アクセス時刻 */
+ struct timespec st_mtim; /* 最終修正時刻 */
+ struct timespec st_ctim; /* 最終状態変更時刻 */
+
+#define st_atime st_atim.tv_sec /* 後方互換性 */
+#define st_mtime st_mtim.tv_sec
+#define st_ctime st_ctim.tv_sec
};
.fi
.in
-.PP
+
+\fI注意:\fP \fIstat\fP 構造体のフィールドの順序はアーキテクチャにより様々である。
+また、上記の定義では、フィールド間に存在することがあるパディングバイトは書かれていない。このパディングバイトはアーキテクチャによっても異なる。詳細を知る必要がある場合は
+glibc とカーネルのソースを調べてほしい。
+
\fIst_dev\fP フィールドは、このファイルが存在するデバイスを示す (マクロ \fBmajor\fP(3), \fBminor\fP(3)
は、このフィールドのデバイス ID を分解するのに役立つだろう)。
\fIst_size\fP フィールドは、(通常のファイルかシンボリックリンクの場合に)
ファイルの大きさをバイト単位で示す。 シンボリックリンクの大きさは、
-シンボリックリンクに含まれている パス名の長さ (終端の NULL バイトは含まない)
+シンボリックリンクに含まれている パス名の長さ (終端のヌルバイトは含まない)
である。
\fIst_blocks\fP フィールドは、ファイルの大きさを 512 バイトのブロックサイズ単位で示す フィールドは、ファイルに割り当てされたブロック数を
\fIst_ctime\fP フィールドは書き込みや inode 情報 (所有者、グループ、リンク数、モードなど) の 設定によって変更される。
.PP
-以下の POSIX マクロは、 \fIst_mode\fP フィールド で使用されるファイル種別のチェックのために定義されている :
+以下のマスク値が \fIst_mode\fP フィールドのファイル種別の検査用に定義されている。
+.in +4n
+.TS
+lB l l.
+S_IFMT 0170000 ファイル種別を示すビット領域を表すビットマスク
+
+S_IFSOCK 0140000 ソケット
+S_IFLNK 0120000 シンボリックリンク
+S_IFREG 0100000 通常のファイル
+S_IFBLK 0060000 ブロック・デバイス
+S_IFDIR 0040000 ディレクトリ
+S_IFCHR 0020000 キャラクター・デバイス
+S_IFIFO 0010000 FIFO
+.TE
+.in
+.PP
+したがって、(例えば) 通常のファイルかどうかを検査するには、以下のようにすればよい。
+
+.nf
+.in +4n
+stat(pathname, &sb);
+if ((sb.st_mode & S_IFMT) == S_IFREG) {
+ /* Handle regular file */
+}
+.in
+.fi
+.PP
+上記の形の検査はよくあるので、 POSIX では以下のマクロが定義されており、 \fIst_mode\fP
+のファイル種別の検査をより簡単に書けるようになっている。
.RS 4
.TP 1.2i
\fBS_ISREG\fP(m)
ソケットか? (POSIX.1\-1996 にはない)
.RE
.PP
-以下のフラグが \fIst_mode\fP フィールド用に定義されている:
+上で挙げたコードは以下のように書き換えることができる。
+
+.nf
+.in +4n
+stat(pathname, &sb);
+if (S_ISREG(sb.st_mode)) {
+ /* Handle regular file */
+}
+.in
+.fi
+.PP
+上記のほとんどのファイル種別検査マクロの定義は、 機能検査マクロ \fB_BSD_SOURCE\fP (glibc 2.19 以前の場合)、
+\fB_SVID_SOURCE\fP (glibc 2.19 以前の場合)、 \fB_DEFAULT_SOURCE\fP (glibc 2.20 以降の場合)
+のいずれかが定義されている場合に公開される。 さらに、 \fBS_IFSOCK\fP と \fBS_ISSOCK\fP 以外の上記のすべてのマクロの定義は
+\fB_XOPEN_SOURCE\fP が定義されている場合にも公開される。 \fBS_IFSOCK\fP の定義は \fB_XOPEN_SOURCE\fP が値 500
+以上で定義された場合にも公開される。
+
+\fBS_ISSOCK\fP() の定義が公開されるのは以下の機能検査マクロが定義されている場合である: \fB_BSD_SOURCE\fP (glibc 2.19
+以前の場合)、 \fB_DEFAULT_SOURCE\fP (glibc 2.20 以降の場合)、 値 500 以上の \fB_XOPEN_SOURCE\fP、
+値が 200112L 以上の \fB_POSIX_C_SOURCE\fP。
+.PP
+以下のマスク値が \fIst_mode\fP フィールドのファイルのアクセス許可の検査用に定義されている。
.in +4n
.TS
lB l l.
-S_IFMT 0170000 ファイル種別を示すビット領域を表すビットマスク
-S_IFSOCK 0140000 ソケット
-S_IFLNK 0120000 シンボリックリンク
-S_IFREG 0100000 通常のファイル
-S_IFBLK 0060000 ブロック・デバイス
-S_IFDIR 0040000 ディレクトリ
-S_IFCHR 0020000 キャラクター・デバイス
-S_IFIFO 0010000 FIFO
S_ISUID 0004000 set\-user\-ID bit
S_ISGID 0002000 set\-group\-ID bit (下記参照)
S_ISVTX 0001000 スティッキー・ビット (下記参照)
-S_IRWXU 00700 ファイル所有者のアクセス許可用のビットマスク
-S_IRUSR 00400 所有者の読み込み許可
-S_IWUSR 00200 所有者の書き込み許可
-S_IXUSR 00100 所有者の実行許可
-S_IRWXG 00070 グループのアクセス許可用のビットマスク
-S_IRGRP 00040 グループの読み込み許可
-S_IWGRP 00020 グループの書き込み許可
-S_IXGRP 00010 グループの実行許可
-S_IRWXO 00007 他人 (others) のアクセス許可用のビットマスク
-S_IROTH 00004 他人の読み込み許可
-S_IWOTH 00002 他人の書き込み許可
-S_IXOTH 00001 他人の実行許可
+
+S_IRWXU 00700 ファイル所有者のアクセス許可用のビットマスク
+S_IRUSR 00400 所有者の読み込み許可
+S_IWUSR 00200 所有者の書き込み許可
+S_IXUSR 00100 所有者の実行許可
+
+S_IRWXG 00070 グループのアクセス許可用のビットマスク
+S_IRGRP 00040 グループの読み込み許可
+S_IWGRP 00020 グループの書き込み許可
+S_IXGRP 00010 グループの実行許可
+
+S_IRWXO 00007 T{
+他人 (others) のアクセス許可用のビットマスク
+T}
+S_IROTH 00004 他人の読み込み許可
+S_IWOTH 00002 他人の書き込み許可
+S_IXOTH 00001 他人の実行許可
.TE
.in
.P
ビットが設定される。グループ実行ビット (\fBS_IXGRP\fP) が設定されていないファイルに設定された場合は、 set\-group\-ID
ビットはファイル/レコードの 強制的な (mandatory) ロックを表す。
.P
+.\"
+.\"
ディレクトリにスティッキービット (S_ISVTX) が設定された場合は、 そのディレクトリのファイルの名前を変更したり、削除したりできるのは、
そのファイルの所有者か、そのディレクトリの所有者か、特権プロセス だけとなる。
+.SS fstatat()
+\fBfstatat\fP() システムコールは \fBstat\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+指定された \fIpathname\fP が相対パスの場合、 ファイルディスクリプタ \fIdirfd\fP が参照するディレクトリに対する相対パスと解釈される
+(\fBstat\fP() に相対パスを渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBstat\fP(2) と同様に)
+\fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+
+この \fIflags\fP 引き数は下記のフラグの 0 個以上の論理和を取ったものである:
+.TP
+\fBAT_EMPTY_PATH\fP (Linux 2.6.39 以降)
+.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
+.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
+\fIpathname\fP が空文字列の場合、 \fIdirfd\fP が参照するファイルに対して操作を行う (\fIdirfd\fP は \fBopen\fP(2) の
+\fBO_PATH\fP フラグを使って取得できる)。 \fBdirfd\fP が \fBAT_FDCWD\fP
+の場合、呼び出しはカレントワーキングディレクトリに対して操作を行う。 この場合、 \fIdirfd\fP
+は、ディレクトリだけでなく、任意のタイプのファイルを参照することができる。 このフラグは Linux 固有であり、その定義を得るには
+\fB_GNU_SOURCE\fP を定義すること。
+.TP
+\fBAT_NO_AUTOMOUNT\fP (Linux 2.6.38 以降)
+.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
+\fIpathname\fP がオートマウントポイントとなっているディレクトリの場合、 \fIpathname\fP の最終 ("basename")
+要素のオートマウントを行わない。 これにより (マウントされるはずの場所ではなく) オートマウントポイントの属性を取得することができる。
+このフラグを使うと、 ディレクトリをスキャンするツールがオートマウントポイントのディレクトリを大量にオートマウントしてしまうのを防ぐことができる。
+マウントポイントがすでにマウントされている場合 \fBAT_NO_AUTOMOUNT\fP フラグは何の効果もない。 このフラグは Linux
+固有であり、その定義を得るには \fB_GNU_SOURCE\fP を定義すること。
+.TP
+\fBAT_SYMLINK_NOFOLLOW\fP
+(\fBlstat\fP() 同様) \fIpathname\fP がシンボリックリンクの場合リンクの展開を行わず、 リンク自身の情報を返す (デフォルトでは、
+\fBfstatat\fP() は、 \fBstat\fP() と同様に、シンボリックリンクの展開を行う)。
+.PP
+\fBfstatat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
.SH 返り値
成功した場合、0 が返される。 失敗した場合、 \-1 が返され、 \fIerrno\fP に適切な値がセットされる。
.SH エラー
.TP
\fBEACCES\fP
-\fIpath\fP が所属するディレクトリとその上位のディレクトリのいずれかに 対する検索許可がなかった (\fBpath_resolution\fP(7)
-も参照のこと)。
+\fIpathname\fP が所属するディレクトリとその上位のディレクトリのいずれかに 対する検索許可がなかった
+(\fBpath_resolution\fP(7) も参照のこと)。
.TP
\fBEBADF\fP
\fIfd\fP が不正である。
パスを辿る際に解決すべきシンボリックリンクが多過ぎた。
.TP
\fBENAMETOOLONG\fP
-\fIpath\fP が長過ぎる。
+\fIpathname\fP が長過ぎる。
.TP
\fBENOENT\fP
-\fIpath\fP の構成要素が存在しないか、 \fIpath\fP が空文字列である。
+\fIpathname\fP の構成要素が存在しないか、 \fIpathname\fP が空文字列である。
.TP
\fBENOMEM\fP
カーネルのメモリが足りない。
.TP
\fBENOTDIR\fP
-\fIpath\fP の前半部分 (prefix) の構成要素がディレクトリではない。
+\fIpathname\fP の前半部分 (prefix) の構成要素がディレクトリではない。
.TP
\fBEOVERFLOW\fP
-\fIpath\fP または \fIfd\fP が、ファイルサイズ、inode 番号、ブロック数が
+\fIpathname\fP または \fIfd\fP が、ファイルサイズ、inode 番号、ブロック数が
それぞれ \fIoff_t\fP 型、 \fIino_t\fP 型、 \fIblkcnt_t\fP 型で表現できないファイルを
参照している。このエラーが起こるのは、例えば、32 ビットプラットフォーム上で
\fI\-D_FILE_OFFSET_BITS=64\fP を指定せずにコンパイルされたアプリケーションが、
ファイルサイズが \fI(1<<31)\-1\fP バイトを超えるファイルに対して
\fBstat\fP() を呼び出した場合である。
+.PP
+\fBfstatat\fP() では以下のエラーも発生することがある。
+.TP
+\fBEBADF\fP
+\fIdirfd\fP が有効なファイルディスクリプタでない。
+.TP
+\fBEINVAL\fP
+\fIflags\fP に無効なフラグが指定された。
+.TP
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
+.SH バージョン
+\fBfstatat\fP() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
+に追加された。
.SH 準拠
.\" SVr4 documents additional
.\" .BR fstat ()
.\" and
.\" .BR lstat ()
.\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
-これらのシステムコールは SVr4, 4.3BSD, POSIX.1\-2001 に準拠している。 \fBstat\fP() と \fBfstat\fP()
-コールは SVr4, SVID, POSIX, X/OPEN, 4.3BSD に準拠している。 \fBlstat\fP() コールは 4.3BSD と
-SVr4 に準拠している。
+\fBstat\fP(), \fBfstat\fP(), \fBlstat\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1.2008.
+
+\fBfstatat\fP(): POSIX.1\-2008.
POSIX.1\-2001 では、シンボリックリンクに対する \fBlstat\fP() で
有効な情報を返すように求められていたのは、 \fIstat\fP 構造体の \fIst_size\fP
POSIX.1\-2001 には両方とも存在する。 前者は SVID 4 に、後者は SUSv2 に
由来している。
.LP
-UNIX V7 (とその後のシステム) は \fBS_IREAD\fP, \fBS_IWRITE\fP, \fBS_IEXEC\fP を持っており、
+UNIX\ V7 (とその後のシステム) は \fBS_IREAD\fP, \fBS_IWRITE\fP, \fBS_IEXEC\fP を持っており、
POSIX はその同義語として \fBS_IRUSR\fP, \fBS_IWUSR\fP, \fBS_IXUSR\fP を規定している。
.SS 他のシステム
各種システムで使用されていた(いる)値:
スティッキー コマンドは Version 32V AT&T UNIX で登場した。
.SH 注意
-.\" As at kernel 2.6.25, XFS and JFS support nanosecond timestamps,
-.\" but ext2, ext3, and Reiserfs do not.
-カーネル 2.5.48 以降では、 \fIstat\fP 構造体は 3 つのファイルのタイムスタンプ
-関連のフィールドでナノ秒単位の精度に対応している。 glibc では、機能検査
-マクロ \fB_BSD_SOURCE\fP か \fB_SVID_SOURCE\fP が定義された場合に、各フィールドの
-ナノ秒の情報を \fIst_atim.tv_nsec\fP という形式の名前で公開する。
-これらのフィールドは POSIX.1\-2008 で規定されており、
-バージョン 2.12 以降の glibc では、
-\fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義されるか、
-\fB_XOPEN_SOURCE\fP が 700 以上の値で定義された場合に、
-これらのフィールドが公開される。
-上記のマクロのいずれも定義されていない場合、ナノ秒の値は
-\fIst_atimensec\fP という形式の名前で公開される。
-秒より細かいタイムスタンプをサポートしていないファイルシステムでは、
-ナノ秒のフィールドは 0 に設定される。
-
Linux では、 \fBlstat\fP() は一般には自動マウント動作 (automounter action) の
きっかけとならないが、 \fBstat\fP() はきっかけとなる (\fBfstatat\fP(2) を参照)。
\fI/proc\fP ディレクトリ以下にあるファイルのほとんどでは、 \fBstat\fP() を呼び出した際に、 \fIst_size\fP
フィールドにファイルサイズが返されない。 代わりに \fIst_size\fP フィールドには 0 が返される。
+.SS タイムスタンプフィールド
+古いカーネルや古い標準では、ナノ秒精度のタイムスタンプフィールドはサポートされていなかった。 代わりに 3 つの \fItime_t\fP
+型のタイムスタンプフィールド \fIst_atime\fP, \fIst_mtime\fP, and \fIst_ctime\fP があった。これらのフィールドには 1
+秒単位のタイムスタンプが記録されていた。
+
+カーネル 2.5.48 以降では、 \fIstat\fP 構造体は 3 つのファイルのタイムスタンプ関連のフィールドでナノ秒単位の精度に対応している。
+機能検査マクロ \fB_BSD_SOURCE\fP か \fB_SVID_SOURCE\fP が定義された場合に、各タイムスタンプのナノ秒の情報は
+\fIst_atim.tv_nsec\fP という形式の名前で参照できる。 ナノ秒のタイムスタンプは現在では標準化されており、 POSIX.1\-2008
+からである。 バージョン 2.12 以降の glibc では、 \fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義されるか、
+\fB_XOPEN_SOURCE\fP が 700 以上の値で定義された場合にも、 このナノ秒のタイムスタンプが公開される。
+上記のマクロのいずれも定義されていない場合、ナノ秒の値は \fIst_atimensec\fP という形式の名前で公開される。
+
+.\" commit ef7f38359ea8b3e9c7f2cae9a4d4935f55ca9e80
+ナノ秒のタイムスタンプは XFS, JFS, Btrfs, ext4 でサポートされている (Linux 2.6.23 以降)。
+ナノ秒のタイムスタンプは ext2, ext3, Reiserfs ではサポートされていない。
+サブ秒のタイムスタンプをサポートしていないファイルシステムでは、 ナノ秒のフィールドには値 0 が入る。
.SS 背後のカーネル・インタフェース
.\"
.\" A note from Andries Brouwer, July 2007
の \fBstat\fP() ラッパー関数はこれらの詳細をアプリケーションから隠蔽してくれる。
具体的には、カーネルが提供しているシステムコールのうち最新のバージョンを 起動し、古いバイナリの場合には必要に応じて返された情報を再構成
(repack) する。 \fBfstat\fP() と \fBlstat\fP() についても同様である。
+
+glibc の \fBfstatat\fP() ラッパー関数が内部で利用するシステムコールは、実際には \fBfstatat64\fP() である。
.SH 例
以下のプログラムは \fBstat\fP() を呼び出し、返ってきた \fIstat\fP 構造体のフィールドのいくつかを表示する。
.nf
}
.fi
.SH 関連項目
-\fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2), \fBfstatat\fP(2), \fBreadlink\fP(2),
-\fButime\fP(2), \fBcapabilities\fP(7), \fBsymlink\fP(7)
+\fBls\fP(1), \fBstat\fP(1), \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2),
+\fBreadlink\fP(2), \fButime\fP(2), \fBcapabilities\fP(7), \fBsymlink\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。