OSDN Git Service

(split) LDP: Update draft and release (from the previous commit)
[linuxjm/LDP_man-pages.git] / release / man2 / stat.2
1 .\" t
2 .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
3 .\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
4 .\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
5 .\"
6 .\" %%%LICENSE_START(VERBATIM)
7 .\" Permission is granted to make and distribute verbatim copies of this
8 .\" manual provided the copyright notice and this permission notice are
9 .\" preserved on all copies.
10 .\"
11 .\" Permission is granted to copy and distribute modified versions of this
12 .\" manual under the conditions for verbatim copying, provided that the
13 .\" entire resulting derived work is distributed under the terms of a
14 .\" permission notice identical to this one.
15 .\"
16 .\" Since the Linux kernel and libraries are constantly changing, this
17 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
18 .\" responsibility for errors or omissions, or for damages resulting from
19 .\" the use of the information contained herein.  The author(s) may not
20 .\" have taken the same level of care in the production of this manual,
21 .\" which is licensed free of charge, as they might when working
22 .\" professionally.
23 .\"
24 .\" Formatted or processed versions of this manual, if unaccompanied by
25 .\" the source, must acknowledge the copyright and authors of this work.
26 .\" %%%LICENSE_END
27 .\"
28 .\" Modified by Michael Haardt <michael@moria.de>
29 .\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
30 .\" Modified 1995-05-18 by Todd Larason <jtl@molehill.org>
31 .\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
32 .\" Modified 1995-01-09 by Richard Kettlewell <richard@greenend.org.uk>
33 .\" Modified 1998-05-13 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
34 .\" Modified 1999-07-06 by aeb & Albert Cahalan
35 .\" Modified 2000-01-07 by aeb
36 .\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
37 .\" 2007-06-08 mtk: Added example program
38 .\" 2007-07-05 mtk: Added details on underlying system call interfaces
39 .\"
40 .\"*******************************************************************
41 .\"
42 .\" This file was generated with po4a. Translate the source file.
43 .\"
44 .\"*******************************************************************
45 .\"
46 .\" Japanese Version Copyright (c) 1998-1999 HANATAKA Shinya
47 .\" and Copyright (c) 2005-2008 Akihiro MOTOKI
48 .\" Translated 1998-06-21, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
49 .\" Modified 1999-04-16, HANATAKA Shinya
50 .\" Updated 2000-01-03, Kentaro Shirakata <argrath@ub32.org>
51 .\" Updated 2000-10-06, Kentaro Shirakata
52 .\" Updated 2001-04-09, Kentaro Shirakata
53 .\" Updated 2001-06-25, Kentaro Shirakata
54 .\" Updated 2005-02-28, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
55 .\" Updated 2005-09-06, Akihiro MOTOKI
56 .\" Updated 2005-11-19, Akihiro MOTOKI, catch up to LDP v2.14
57 .\" Updated 2006-07-21, Akihiro MOTOKI, LDP v2.36
58 .\" Updated 2007-06-13, Akihiro MOTOKI, LDP v2.55
59 .\" Updated 2008-09-19, Akihiro MOTOKI, LDP v3.08
60 .\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
61 .\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
62 .\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
63 .\"
64 .TH STAT 2 2014\-03\-17 Linux "Linux Programmer's Manual"
65 .SH 名前
66 stat, fstat, lstat, fstatat \- ファイルの状態を取得する
67 .SH 書式
68 .nf
69 \fB#include <sys/types.h>\fP
70 .br
71 \fB#include <sys/stat.h>\fP
72 .br
73 \fB#include <unistd.h>\fP
74 .sp
75 \fBint stat(const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
76 .br
77 \fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
78 .br
79 \fBint lstat(const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
80 .sp
81 \fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
82 \fB#include <sys/stat.h>\fP
83 .sp
84 \fBint fstatat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, struct stat *\fP\fIbuf\fP\fB,\fP
85 \fB            int \fP\fIflags\fP\fB);\fP
86 .fi
87 .sp
88 .in -4n
89 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
90 .in
91 .ad l
92 .PD 0
93 .sp
94 \fBlstat\fP():
95 .RS 4
96 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
97 .br
98 || /* glibc 2.10 以降: */ _POSIX_C_SOURCE\ >=\ 200112L
99 .RE
100 .sp
101 \fBfstatat\fP():
102 .PD 0
103 .ad l
104 .RS 4
105 .TP  4
106 Since glibc 2.10:
107 _XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
108 .TP 
109 Before glibc 2.10:
110 _ATFILE_SOURCE
111 .RE
112 .PD
113 .ad
114 .SH 説明
115 .PP
116 These functions return information about a file, in the buffer pointed to by
117 \fIstat\fP.  No permissions are required on the file itself, but\(emin the case
118 of \fBstat\fP(), \fBfstatat\fP(), and \fBlstat\fP()\(emexecute (search) permission is
119 required on all of the directories in \fIpathname\fP that lead to the file.
120 .PP
121 \fBstat\fP()  and \fBfstatat\fP()  retrieve information about the file pointed to
122 by \fIpathname\fP; the differences for \fBfstatat\fP()  are described below.
123
124 \fBlstat\fP()  is identical to \fBstat\fP(), except that if \fIpathname\fP is a
125 symbolic link, then it returns information about the link itself, not the
126 file that it refers to.
127
128 \fBfstat\fP()  is identical to \fBstat\fP(), except that the file about which
129 informat is to be retrieved is specified by the file descriptor \fIfd\fP.
130 .PP
131 これらのシステムコールはいずれも、結果を \fIstat\fP 構造体に入れて返す。 \fIstat\fP 構造体には以下のフィールドが含まれている:
132 .PP
133 .in +4n
134 .nf
135 struct stat {
136     dev_t     st_dev;         /* ID of device containing file */
137     ino_t     st_ino;         /* inode number */
138     mode_t    st_mode;        /* protection */
139     nlink_t   st_nlink;       /* number of hard links */
140     uid_t     st_uid;         /* user ID of owner */
141     gid_t     st_gid;         /* group ID of owner */
142     dev_t     st_rdev;        /* device ID (if special file) */
143     off_t     st_size;        /* total size, in bytes */
144     blksize_t st_blksize;     /* blocksize for filesystem I/O */
145     blkcnt_t  st_blocks;      /* number of 512B blocks allocated */
146
147     /* Since Linux 2.6, the kernel supports nanosecond
148        precision for the following timestamp fields.
149        For the details before Linux 2.6, see NOTES. */
150
151     struct timespec st_atim;  /* time of last access */
152     struct timespec st_mtim;  /* time of last modification */
153     struct timespec st_ctim;  /* time of last status change */
154
155 #define st_atime st_atim.tv_sec      /* Backward compatibility */
156 #define st_mtime st_mtim.tv_sec
157 #define st_ctime st_ctim.tv_sec
158 };
159 .fi
160 .in
161
162 \fINote:\fP the order of fields in the \fIstat\fP structure varies somewhat across
163 architectures.  In addition, the definition above does not show the padding
164 bytes that may be present between some fields on various architectures.
165 Consult the the glibc and kernel source code if you need to know the
166 details.
167
168 \fIst_dev\fP フィールドは、このファイルが存在するデバイスを示す (マクロ \fBmajor\fP(3), \fBminor\fP(3)
169 は、このフィールドのデバイス ID を分解するのに役立つだろう)。
170
171 \fIst_rdev\fP フィールドは、このファイル (inode) が表すデバイスを示す。
172
173 \fIst_size\fP フィールドは、(通常のファイルかシンボリックリンクの場合に)
174 ファイルの大きさをバイト単位で示す。 シンボリックリンクの大きさは、
175 シンボリックリンクに含まれている パス名の長さ (終端の NULL バイトは含まない)
176 である。
177
178 \fIst_blocks\fP フィールドは、ファイルの大きさを 512 バイトのブロックサイズ単位で示す フィールドは、ファイルに割り当てされたブロック数を
179 512 バイト単位で示す。 (ファイルに穴があるような場合、この値は \fIst_size\fP/512 より小さくなることもある)。
180
181 \fIst_blksize\fP フィールドは、効率的にファイルシステム I/O ができる「好ましい」 ブロックサイズを示す
182 (もっと小さい単位でファイルに書き込みを行うと、 読み出し\-\-修正\-\-再書き込みといった非効率な動作になってしまうかもしれない)。
183 .PP
184 全ての Linux のファイルシステムが全ての時間フィールドを 実装しているわけではない。 ファイルやディレクトリのアクセスが \fIst_atime\fP
185 フィールドを更新しないようなかたちでマウントできるファイルシステムもある。 (\fBmount\fP(8)  の \fInoatime\fP,
186 \fInodiratime\fP, \fIrelatime\fP や \fBmount\fP(2)  の関連する情報を参照)。 また、ファイルが \fBO_NOATIME\fP
187 付きでオープンされている場合には \fIst_atime\fP は更新されない。 \fBopen\fP(2)  参照。
188
189 \fIst_atime\fP フィールドはファイルアクセスがあった場合に変更される (例えば、 \fBexecve\fP(2), \fBmknod\fP(2),
190 \fBpipe\fP(2), \fButime\fP(2)  を使用した場合や \fBread\fP(2)  で 1 バイト以上読み込んだ場合など)。
191 \fBmmap\fP(2)  などの他のルーチンでは、 \fIst_atime\fP は更新されることもあれば、そうでない場合もある。
192
193 \fIst_mtime\fP フィールドは、ファイルが修正された場合に変更される (例えば、 \fBmknod\fP(2), \fBtruncate\fP(2),
194 \fButime\fP(2)  を使用した場合や \fBwrite\fP(2)  で 1 バイト以上書き込みをした場合など)。 さらに、ディレクトリの
195 \fIst_mtime\fP は、そのディレクトリで ファイルが作成されたり削除されたりすると変更される。 \fIst_mtime\fP フィールドは
196 所有者やグループやハード・リンク数やモードの変更では変更 \fIされない。\fP
197
198 \fIst_ctime\fP フィールドは書き込みや inode 情報 (所有者、グループ、リンク数、モードなど) の 設定によって変更される。
199 .PP
200 以下の POSIX マクロは、 \fIst_mode\fP フィールド で使用されるファイル種別のチェックのために定義されている :
201 .RS 4
202 .TP  1.2i
203 \fBS_ISREG\fP(m)
204 通常のファイルか?
205 .TP 
206 \fBS_ISDIR\fP(m)
207 ディレクトリか?
208 .TP 
209 \fBS_ISCHR\fP(m)
210 キャラクター・デバイスか?
211 .TP 
212 \fBS_ISBLK\fP(m)
213 ブロック・デバイスか?
214 .TP 
215 \fBS_ISFIFO\fP(m)
216 FIFO (名前付きパイプ) か?
217 .TP 
218 \fBS_ISLNK\fP(m)
219 シンボリックリンクか? (POSIX.1\-1996 にはない)
220 .TP 
221 \fBS_ISSOCK\fP(m)
222 ソケットか? (POSIX.1\-1996 にはない)
223 .RE
224 .PP
225 以下のフラグが \fIst_mode\fP フィールド用に定義されている:
226 .in +4n
227 .TS
228 lB l l.
229 S_IFMT  0170000 ファイル種別を示すビット領域を表すビットマスク
230 S_IFSOCK        0140000 ソケット
231 S_IFLNK 0120000 シンボリックリンク
232 S_IFREG 0100000 通常のファイル
233 S_IFBLK 0060000 ブロック・デバイス
234 S_IFDIR 0040000 ディレクトリ
235 S_IFCHR 0020000 キャラクター・デバイス
236 S_IFIFO 0010000 FIFO
237 S_ISUID 0004000 set\-user\-ID bit
238 S_ISGID 0002000 set\-group\-ID bit (下記参照)
239 S_ISVTX 0001000 スティッキー・ビット (下記参照)
240 S_IRWXU 00700   ファイル所有者のアクセス許可用のビットマスク
241 S_IRUSR 00400   所有者の読み込み許可
242 S_IWUSR 00200   所有者の書き込み許可
243 S_IXUSR 00100   所有者の実行許可
244 S_IRWXG 00070   グループのアクセス許可用のビットマスク
245 S_IRGRP 00040   グループの読み込み許可
246 S_IWGRP 00020   グループの書き込み許可
247 S_IXGRP 00010   グループの実行許可
248 S_IRWXO 00007   他人 (others) のアクセス許可用のビットマスク
249 S_IROTH 00004   他人の読み込み許可
250 S_IWOTH 00002   他人の書き込み許可
251 S_IXOTH 00001   他人の実行許可
252 .TE
253 .in
254 .P
255 set\-group\-ID bit (\fBS_ISGID\fP)  にはいくつかの特殊な使用法がある: ディレクトリに設定した場合には、そのディレクトリが
256 BSD 方式で使用される ことを示す。つまり、そのディレクトリに作成されたファイルのグループID は 作成したプロセスの実効 (effective)
257 グループID ではなく、ディレクトリの グループID を継承する。また、そのディレクトリに作成されたディレクトリにも \fBS_ISGID\fP
258 ビットが設定される。グループ実行ビット (\fBS_IXGRP\fP)  が設定されていないファイルに設定された場合は、 set\-group\-ID
259 ビットはファイル/レコードの 強制的な (mandatory) ロックを表す。
260 .P
261 .\"
262 .\"
263 ディレクトリにスティッキービット (S_ISVTX) が設定された場合は、 そのディレクトリのファイルの名前を変更したり、削除したりできるのは、
264 そのファイルの所有者か、そのディレクトリの所有者か、特権プロセス だけとなる。
265 .SS fstatat()
266 \fBfstatat\fP() システムコールは \fBstat\fP() と全く同様に動作するが、以下で説明する点が異なる。
267
268 If the pathname given in \fIpathname\fP is relative, then it is interpreted
269 relative to the directory referred to by the file descriptor \fIdirfd\fP
270 (rather than relative to the current working directory of the calling
271 process, as is done by \fBstat\fP()  for a relative pathname).
272
273 If \fIpathname\fP is relative and \fIdirfd\fP is the special value \fBAT_FDCWD\fP,
274 then \fIpathname\fP is interpreted relative to the current working directory of
275 the calling process (like \fBstat\fP()).
276
277 If \fIpathname\fP is absolute, then \fIdirfd\fP is ignored.
278
279 \fIflags\fP can either be 0, or include one or more of the following flags
280 ORed:
281 .TP 
282 \fBAT_EMPTY_PATH\fP (Linux 2.6.39 以降)
283 .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
284 .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
285 If \fIpathname\fP is an empty string, operate on the file referred to by
286 \fIdirfd\fP (which may have been obtained using the \fBopen\fP(2)  \fBO_PATH\fP
287 flag).  In this case, \fIdirfd\fP can refer to any type of file, not just a
288 directory.  This flag is Linux\-specific; define \fB_GNU_SOURCE\fP to obtain its
289 definition.
290 .TP 
291 \fBAT_NO_AUTOMOUNT\fP (Linux 2.6.38 以降)
292 .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
293 Don't automount the terminal ("basename") component of \fIpathname\fP if it is
294 a directory that is an automount point.  This allows the caller to gather
295 attributes of an automount point (rather than the location it would mount).
296 This flag can be used in tools that scan directories to prevent
297 mass\-automounting of a directory of automount points.  The
298 \fBAT_NO_AUTOMOUNT\fP flag has no effect if the mount point has already been
299 mounted over.  This flag is Linux\-specific; define \fB_GNU_SOURCE\fP to obtain
300 its definition.
301 .TP 
302 \fBAT_SYMLINK_NOFOLLOW\fP
303 If \fIpathname\fP is a symbolic link, do not dereference it: instead return
304 information about the link itself, like \fBlstat\fP().  (By default,
305 \fBfstatat\fP()  dereferences symbolic links, like \fBstat\fP().)
306 .PP
307 See \fBopenat\fP(2)  for an explanation of the need for \fBfstatat\fP().
308 .SH 返り値
309 成功した場合、0 が返される。 失敗した場合、 \-1 が返され、 \fIerrno\fP に適切な値がセットされる。
310 .SH エラー
311 .TP 
312 \fBEACCES\fP
313 \fIpathname\fP が所属するディレクトリとその上位のディレクトリのいずれかに 対する検索許可がなかった
314 (\fBpath_resolution\fP(7)  も参照のこと)。
315 .TP 
316 \fBEBADF\fP
317 \fIfd\fP が不正である。
318 .TP 
319 \fBEFAULT\fP
320 アドレスが間違っている。
321 .TP 
322 \fBELOOP\fP
323 パスを辿る際に解決すべきシンボリックリンクが多過ぎた。
324 .TP 
325 \fBENAMETOOLONG\fP
326 \fIpathname\fP が長過ぎる。
327 .TP 
328 \fBENOENT\fP
329 \fIpathname\fP の構成要素が存在しないか、 \fIpathname\fP が空文字列である。
330 .TP 
331 \fBENOMEM\fP
332 カーネルのメモリが足りない。
333 .TP 
334 \fBENOTDIR\fP
335 \fIpathname\fP の前半部分 (prefix) の構成要素がディレクトリではない。
336 .TP 
337 \fBEOVERFLOW\fP
338 \fIpathname\fP または \fIfd\fP が、ファイルサイズ、inode 番号、ブロック数が
339 それぞれ \fIoff_t\fP 型、 \fIino_t\fP 型、 \fIblkcnt_t\fP 型で表現できないファイルを
340 参照している。このエラーが起こるのは、例えば、32 ビットプラットフォーム上で
341 \fI\-D_FILE_OFFSET_BITS=64\fP を指定せずにコンパイルされたアプリケーションが、
342 ファイルサイズが \fI(1<<31)\-1\fP バイトを超えるファイルに対して
343 \fBstat\fP() を呼び出した場合である。
344 .PP
345 The following additional errors can occur for \fBfstatat\fP():
346 .TP 
347 \fBEBADF\fP
348 \fIdirfd\fP が有効なファイルディスクリプタでない。
349 .TP 
350 \fBEINVAL\fP
351 Invalid flag specified in \fIflags\fP.
352 .TP 
353 \fBENOTDIR\fP
354 \fIpathname\fP is relative and \fIdirfd\fP is a file descriptor referring to a
355 file other than a directory.
356 .SH バージョン
357 \fBfstatat\fP()  was added to Linux in kernel 2.6.16; library support was added
358 to glibc in version 2.4.
359 .SH 準拠
360 .\" SVr4 documents additional
361 .\" .BR fstat ()
362 .\" error conditions EINTR, ENOLINK, and EOVERFLOW.  SVr4
363 .\" documents additional
364 .\" .BR stat ()
365 .\" and
366 .\" .BR lstat ()
367 .\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
368 \fBstat\fP(), \fBfstat\fP(), \fBlstat\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1.2008.
369
370 \fBfstatat\fP(): POSIX.1\-2008.
371
372 POSIX.1\-2001 では、シンボリックリンクに対する \fBlstat\fP() で
373 有効な情報を返すように求められていたのは、 \fIstat\fP 構造体の \fIst_size\fP
374 と \fIst_mode\fP のファイル種別要素だけであった。
375 POSIX.1\-2008 では規定が厳しくなり、 \fBlstat\fP() は \fIst_mode\fP の
376 アクセス許可ビット以外の全てのフィールドに有効な情報を返すことが
377 求められるようになっている。
378
379 \fIst_blocks\fP と \fIst_blksize\fP フィールドの使用はあまり移植性がない
380 (これらのフィールドは BSD によって導入された。 システムごとに解釈が
381 異なっており、 NFS マウントの場合には同じシステムでも異なる可能性がある)。
382 \fI<sys/stat.h>\fP から \fIblkcnt_t\fP の \fIblksize_t\fP 型定義を
383 読み込みたい場合は、(\fIどの\fPヘッダファイルをインクルードするよりも前に)
384 \fB_XOPEN_SOURCE\fP を 500 以上の値で定義すること。
385 .LP
386 POSIX.1\-1990 には \fBS_IFMT\fP, \fBS_IFSOCK\fP, \fBS_IFLNK\fP, \fBS_IFREG\fP,
387 \fBS_IFBLK\fP, \fBS_IFDIR\fP, \fBS_IFCHR\fP, \fBS_IFIFO\fP, \fBS_ISVTX\fP 定数に関する
388 記述はなかったが、代わりに \fBS_ISDIR\fP() のようなマクロを使用するように
389 要求していた。 \fBS_IF*\fP 定数は POSIX.1\-2001 以降には存在する。
390
391 マクロ \fBS_ISLNK\fP() と \fBS_ISSOCK\fP() は POSIX.1\-1996 にはないが、
392 POSIX.1\-2001 には両方とも存在する。 前者は SVID 4 に、後者は SUSv2 に
393 由来している。
394 .LP
395 UNIX V7 (とその後のシステム) は \fBS_IREAD\fP, \fBS_IWRITE\fP, \fBS_IEXEC\fP を持っており、
396 POSIX はその同義語として \fBS_IRUSR\fP, \fBS_IWUSR\fP, \fBS_IXUSR\fP を規定している。
397 .SS 他のシステム
398 各種システムで使用されていた(いる)値:
399 .ad l
400 .TS
401 l l l l l.
402 16進   名前  ls      8進数 説明
403 f000    S_IFMT          170000  ファイル種別フィールドのビットマスク
404 0000                    000000  T{
405 SCO では 使用不能 inode; BSD では不明なファイル種別;
406 SVID\-v2 と XPG2 では 0 と 0100000 の両方が通常のファイル
407 T}
408 1000    S_IFIFO p|      010000  FIFO (名前付きパイプ)
409 2000    S_IFCHR c       020000  キャラクタ特殊ファイル (V7)
410 3000    S_IFMPC         030000  多重化されたキャラクタ特殊ファイル (V7)
411 4000    S_IFDIR d/      040000  ディレクトリ (V7)
412 5000    S_IFNAM         050000  T{
413 XENIX の二つの副型を持つ名前付きの特殊ファイル
414 副型は \fIst_rdev\fP の値 1, 2 で区別される
415 T}
416 0001    S_INSEM s       000001  XENIX の IFNAM セマフォ副型
417 0002    S_INSHD m       000002  XENIX の IFNAM 共有データ副型
418 6000    S_IFBLK b       060000  ブロック特殊ファイル (V7)
419 7000    S_IFMPB         070000  多重化されたブロック特殊ファイル (V7)
420 8000    S_IFREG \-      100000  通常ファイル (V7)
421 9000    S_IFCMP         110000  VxFS 圧縮ファイル
422 9000    S_IFNWK n       110000  ネットワーク特殊ファイル (HP\-UX)
423 a000    S_IFLNK l@      120000  シンボリックリンク (BSD)
424 b000    S_IFSHAD                130000  T{
425 Solaris の ACL 用の隠し inode (ユーザ空間からは見えない)
426 T}
427 c000    S_IFSOCK        s=      140000  ソケット (BSD; VxFS の "S_IFSOC")
428 d000    S_IFDOOR        D>      150000  Solaris の door ファイル
429 e000    S_IFWHT w%      160000  BSD の空白ファイル (inode を使用しない)
430 0200    S_ISVTX         001000  T{
431 スティッキービット: 使用後もスワップに残す (V7)
432 .br
433 予約 (SVID\-v2)
434 .br
435 ディレクトリ以外: ファイルをキャッシュしない (SunOS)
436 .br
437 ディレクトリの場合: 削除制限フラグ (SVID\-v4.2)
438 T}
439 0400    S_ISGID         002000  T{
440 実行時の set\-group\-ID (V7)
441 .br
442 ディレクトリの場合: GID の伝搬に BSD 方式を使用する
443 T}
444 0400    S_ENFMT         002000  T{
445 System V ファイルロックを強制する (S_ISGID と共有)
446 T}
447 0800    S_ISUID         004000  実行時の set\-user\-ID (V7)
448 0800    S_CDF           004000  T{
449 ディレクトリがコンテキスト依存ファイル (HP\-UX)
450 T}
451 .TE
452 .ad
453
454 スティッキー コマンドは Version 32V AT&T UNIX で登場した。
455 .SH 注意
456 Linux では、 \fBlstat\fP() は一般には自動マウント動作 (automounter action) の
457 きっかけとならないが、 \fBstat\fP() はきっかけとなる (\fBfstatat\fP(2) を参照)。
458
459 \fI/proc\fP ディレクトリ以下にあるファイルのほとんどでは、 \fBstat\fP()  を呼び出した際に、 \fIst_size\fP
460 フィールドにファイルサイズが返されない。 代わりに \fIst_size\fP フィールドには 0 が返される。
461 .SS "Timestamp fields"
462 Older kernels and older standards did not support nanosecond timestamp
463 fields.  Instead, there were three timestamp fields\(em\fIst_atime\fP,
464 \fIst_mtime\fP, and \fIst_ctime\fP\(emtyped as \fItime_t\fP that recorded timestamps
465 with one\-second precision.
466
467 Since kernel 2.5.48, the \fIstat\fP structure supports nanosecond resolution
468 for the three file timestamp fields.  The nanosecond components of each
469 timestamp are available via names of the form \fIst_atim.tv_nsec\fP if the
470 \fB_BSD_SOURCE\fP or \fB_SVID_SOURCE\fP feature test macro is defined.  Nanosecond
471 timestamps are nowadays standardized, starting with POSIX.1\-2008, and,
472 starting with version 2.12, glibc also exposes the nanosecond component
473 names if \fB_POSIX_C_SOURCE\fP is defined with the value 200809L or greater, or
474 \fB_XOPEN_SOURCE\fP is defined with the value 700 or greater.  If none of the
475 aforementioned macros are defined, then the nanosecond values are exposed
476 with names of the form \fIst_atimensec\fP.
477
478 .\" commit ef7f38359ea8b3e9c7f2cae9a4d4935f55ca9e80
479 Nanosecond timestamps are supported on XFS, JFS, Btrfs, and ext4 (since
480 Linux 2.6.23).  Nanosecond timestamps are not supported in ext2, ext3, and
481 Resierfs.  On filesystems that do not support subsecond timestamps, the
482 nanosecond fields are returned with the value 0.
483 .SS 背後のカーネル・インタフェース
484 .\"
485 .\" A note from Andries Brouwer, July 2007
486 .\"
487 .\" > Is the story not rather more complicated for some calls like
488 .\" > stat(2)?
489 .\"
490 .\" Yes and no, mostly no. See /usr/include/sys/stat.h .
491 .\"
492 .\" The idea is here not so much that syscalls change, but that
493 .\" the definitions of struct stat and of the types dev_t and mode_t change.
494 .\" This means that libc (even if it does not call the kernel
495 .\" but only calls some internal function) must know what the
496 .\" format of dev_t or of struct stat is.
497 .\" The communication between the application and libc goes via
498 .\" the include file <sys/stat.h> that defines a _STAT_VER and
499 .\" _MKNOD_VER describing the layout of the data that user space
500 .\" uses. Each (almost each) occurrence of stat() is replaced by
501 .\" an occurrence of xstat() where the first parameter of xstat()
502 .\" is this version number _STAT_VER.
503 .\"
504 .\" Now, also the definitions used by the kernel change.
505 .\" But glibc copes with this in the standard way, and the
506 .\" struct stat as returned by the kernel is repacked into
507 .\" the struct stat as expected by the application.
508 .\" Thus, _STAT_VER and this setup cater for the application-libc
509 .\" interface, rather than the libc-kernel interface.
510 .\"
511 .\" (Note that the details depend on gcc being used as c compiler.)
512 時間の経過とともに、 \fIstat\fP 構造体のサイズが大きくなり、この影響で \fBstat\fP()  には 3つのバージョンが存在する:
513 \fIsys_stat\fP()  (スロットは \fI__NR_oldstat\fP)、 \fIsys_newstat\fP()  (スロットは
514 \fI__NR_stat\fP)、 \fIsys_stat64\fP()  (カーネル 2.4 で導入; スロットは \fI__NR_stat64\fP).  glibc
515 の \fBstat\fP()  ラッパー関数はこれらの詳細をアプリケーションから隠蔽してくれる。
516 具体的には、カーネルが提供しているシステムコールのうち最新のバージョンを 起動し、古いバイナリの場合には必要に応じて返された情報を再構成
517 (repack) する。 \fBfstat\fP()  と \fBlstat\fP()  についても同様である。
518
519 The underlying system call employed by the glibc \fBfstatat\fP()  wrapper
520 function is actually called \fBfstatat64\fP().
521 .SH 例
522 以下のプログラムは \fBstat\fP()  を呼び出し、返ってきた \fIstat\fP 構造体のフィールドのいくつかを表示する。
523 .nf
524
525 #include <sys/types.h>
526 #include <sys/stat.h>
527 #include <time.h>
528 #include <stdio.h>
529 #include <stdlib.h>
530
531 int
532 main(int argc, char *argv[])
533 {
534     struct stat sb;
535
536     if (argc != 2) {
537         fprintf(stderr, "Usage: %s <pathname>\en", argv[0]);
538         exit(EXIT_FAILURE);
539     }
540
541     if (stat(argv[1], &sb) == \-1) {
542         perror("stat");
543         exit(EXIT_FAILURE);
544     }
545
546     printf("File type:                ");
547
548     switch (sb.st_mode & S_IFMT) {
549     case S_IFBLK:  printf("block device\en");            break;
550     case S_IFCHR:  printf("character device\en");        break;
551     case S_IFDIR:  printf("directory\en");               break;
552     case S_IFIFO:  printf("FIFO/pipe\en");               break;
553     case S_IFLNK:  printf("symlink\en");                 break;
554     case S_IFREG:  printf("regular file\en");            break;
555     case S_IFSOCK: printf("socket\en");                  break;
556     default:       printf("unknown?\en");                break;
557     }
558
559     printf("I\-node number:            %ld\en", (long) sb.st_ino);
560
561     printf("Mode:                     %lo (octal)\en",
562             (unsigned long) sb.st_mode);
563
564     printf("Link count:               %ld\en", (long) sb.st_nlink);
565     printf("Ownership:                UID=%ld   GID=%ld\en",
566             (long) sb.st_uid, (long) sb.st_gid);
567
568     printf("Preferred I/O block size: %ld bytes\en",
569             (long) sb.st_blksize);
570     printf("File size:                %lld bytes\en",
571             (long long) sb.st_size);
572     printf("Blocks allocated:         %lld\en",
573             (long long) sb.st_blocks);
574
575     printf("Last status change:       %s", ctime(&sb.st_ctime));
576     printf("Last file access:         %s", ctime(&sb.st_atime));
577     printf("Last file modification:   %s", ctime(&sb.st_mtime));
578
579     exit(EXIT_SUCCESS);
580 }
581 .fi
582 .SH 関連項目
583 \fBls\fP(1), \fBstat\fP(1), \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2),
584 \fBreadlink\fP(2), \fButime\fP(2), \fBcapabilities\fP(7), \fBsymlink\fP(7)
585 .SH この文書について
586 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.63 の一部
587 である。プロジェクトの説明とバグ報告に関する情報は
588 http://www.kernel.org/doc/man\-pages/ に書かれている。