OSDN Git Service

(split) LDP: draft snapshot generated from latest ja.po files.
[linuxjm/LDP_man-pages.git] / draft / man2 / stat.2
1 .\" t
2 .\" Hey Emacs! This file is -*- nroff -*- source.
3 .\"
4 .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
5 .\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
6 .\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
7 .\"
8 .\" Permission is granted to make and distribute verbatim copies of this
9 .\" manual provided the copyright notice and this permission notice are
10 .\" preserved on all copies.
11 .\"
12 .\" Permission is granted to copy and distribute modified versions of this
13 .\" manual under the conditions for verbatim copying, provided that the
14 .\" entire resulting derived work is distributed under the terms of a
15 .\" permission notice identical to this one.
16 .\"
17 .\" Since the Linux kernel and libraries are constantly changing, this
18 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
19 .\" responsibility for errors or omissions, or for damages resulting from
20 .\" the use of the information contained herein.  The author(s) may not
21 .\" have taken the same level of care in the production of this manual,
22 .\" which is licensed free of charge, as they might when working
23 .\" professionally.
24 .\"
25 .\" Formatted or processed versions of this manual, if unaccompanied by
26 .\" the source, must acknowledge the copyright and authors of this work.
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 .TH STAT 2 2011\-10\-04 Linux "Linux Programmer's Manual"
46 .SH 名前
47 stat, fstat, lstat \- ファイルの状態を取得する
48 .SH 書式
49 \fB#include <sys/types.h>\fP
50 .br
51 \fB#include <sys/stat.h>\fP
52 .br
53 \fB#include <unistd.h>\fP
54 .sp
55 \fBint stat(const char *\fP\fIpath\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
56 .br
57 \fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
58 .br
59 \fBint lstat(const char *\fP\fIpath\fP\fB, struct stat *\fP\fIbuf\fP\fB);\fP
60 .sp
61 .in -4n
62 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
63 .in
64 .ad l
65 .PD 0
66 .sp
67 \fBlstat\fP():
68 .RS 4
69 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
70 .br
71 || /* glibc 2.10 以降: */ _POSIX_C_SOURCE\ >=\ 200112L
72 .RE
73 .PD
74 .ad
75 .SH 説明
76 .PP
77 これらの関数はファイルについての情報を返す。
78 ファイルそのものに対するアクセス許可は必要としないが、
79 \(em\fBstat\fP() と \fBlstat\fP()  の場合には \(em
80 そのファイルへ至る \fIpath\fP を構成する全てのディレクトリに対する
81 実行 (検索) 許可が必要である。
82 .PP
83 \fBstat\fP()  は \fIpath\fP で指定されたファイルの状態を取得して \fIbuf\fP へ格納する。
84
85 \fBlstat\fP()  は \fBstat\fP()  と同じであるが、 \fIpath\fP がシンボリックリンクの場合、リンクが参照しているファイルではなく、
86 リンク自身の状態を取得する点が異なる。
87
88 \fBfstat\fP()  は \fBstat\fP()  と同じだが、 状態を取得するファイルをファイル・ディスクリプタ \fIfd\fP で指定する。
89 .PP
90 これらのシステムコールはいずれも、結果を \fIstat\fP 構造体に入れて返す。 \fIstat\fP 構造体には以下のフィールドが含まれている:
91 .PP
92 .in +4n
93 .nf
94 struct stat {
95     dev_t     st_dev;     /* ファイルがあるデバイスの ID */
96     ino_t     st_ino;     /* inode 番号 */
97     mode_t    st_mode;    /* アクセス保護 */
98     nlink_t   st_nlink;   /* ハードリンクの数 */
99     uid_t     st_uid;     /* 所有者のユーザ ID */
100     gid_t     st_gid;     /* 所有者のグループ ID */
101     dev_t     st_rdev;    /* デバイス ID (特殊ファイルの場合) */
102     off_t     st_size;    /* 全体のサイズ (バイト単位) */
103     blksize_t st_blksize; /* ファイルシステム I/O での
104                              ブロックサイズ */
105     blkcnt_t  st_blocks;  /* 割り当てられた 512B のブロック数 */
106     time_t    st_atime;   /* 最終アクセス時刻 */
107     time_t    st_mtime;   /* 最終修正時刻 */
108     time_t    st_ctime;   /* 最終状態変更時刻 */
109 };
110 .fi
111 .in
112 .PP
113 \fIst_dev\fP フィールドは、このファイルが存在するデバイスを示す (マクロ \fBmajor\fP(3), \fBminor\fP(3)
114 は、このフィールドのデバイス ID を分解するのに役立つだろう)。
115
116 \fIst_rdev\fP フィールドは、このファイル (inode) が表すデバイスを示す。
117
118 \fIst_size\fP フィールドは、(通常のファイルかシンボリックリンクの場合に)
119 ファイルの大きさをバイト単位で示す。 シンボリックリンクの大きさは、
120 シンボリックリンクに含まれている パス名の長さ (終端の NULL バイトは含まない)
121 である。
122
123 \fIst_blocks\fP フィールドは、ファイルの大きさを 512 バイトのブロックサイズ単位で示す フィールドは、ファイルに割り当てされたブロック数を
124 512 バイト単位で示す。 (ファイルに穴があるような場合、この値は \fIst_size\fP/512 より小さくなることもある)。
125
126 \fIst_blksize\fP フィールドは、効率的にファイルシステム I/O ができる「好ましい」 ブロックサイズを示す
127 (もっと小さい単位でファイルに書き込みを行うと、 読み出し\-\-修正\-\-再書き込みといった非効率な動作になってしまうかもしれない)。
128 .PP
129 全ての Linux のファイルシステムが全ての時間フィールドを 実装しているわけではない。 ファイルやディレクトリのアクセスが \fIst_atime\fP
130 フィールドを更新しないようなかたちでマウントできるファイルシステムもある。 (\fBmount\fP(8)  の \fInoatime\fP,
131 \fInodiratime\fP, \fIrelatime\fP や \fBmount\fP(2)  の関連する情報を参照)。 また、ファイルが \fBO_NOATIME\fP
132 付きでオープンされている場合には \fIst_atime\fP は更新されない。 \fBopen\fP(2)  参照。
133
134 \fIst_atime\fP フィールドはファイルアクセスがあった場合に変更される (例えば、 \fBexecve\fP(2), \fBmknod\fP(2),
135 \fBpipe\fP(2), \fButime\fP(2)  を使用した場合や \fBread\fP(2)  で 1 バイト以上読み込んだ場合など)。
136 \fBmmap\fP(2)  などの他のルーチンでは、 \fIst_atime\fP は更新されることもあれば、そうでない場合もある。
137
138 \fIst_mtime\fP フィールドは、ファイルが修正された場合に変更される (例えば、 \fBmknod\fP(2), \fBtruncate\fP(2),
139 \fButime\fP(2)  を使用した場合や \fBwrite\fP(2)  で 1 バイト以上書き込みをした場合など)。 さらに、ディレクトリの
140 \fIst_mtime\fP は、そのディレクトリで ファイルが作成されたり削除されたりすると変更される。 \fIst_mtime\fP フィールドは
141 所有者やグループやハード・リンク数やモードの変更では変更 \fIされない。\fP
142
143 \fIst_ctime\fP フィールドは書き込みや inode 情報 (所有者、グループ、リンク数、モードなど) の 設定によって変更される。
144 .PP
145 以下の POSIX マクロは、 \fIst_mode\fP フィールド で使用されるファイル種別のチェックのために定義されている :
146 .RS 4
147 .TP  1.2i
148 \fBS_ISREG\fP(m)
149 通常のファイルか?
150 .TP 
151 \fBS_ISDIR\fP(m)
152 ディレクトリか?
153 .TP 
154 \fBS_ISCHR\fP(m)
155 キャラクター・デバイスか?
156 .TP 
157 \fBS_ISBLK\fP(m)
158 ブロック・デバイスか?
159 .TP 
160 \fBS_ISFIFO\fP(m)
161 FIFO (名前付きパイプ) か?
162 .TP 
163 \fBS_ISLNK\fP(m)
164 シンボリックリンクか? (POSIX.1\-1996 にはない)
165 .TP 
166 \fBS_ISSOCK\fP(m)
167 ソケットか? (POSIX.1\-1996 にはない)
168 .RE
169 .PP
170 以下のフラグが \fIst_mode\fP フィールド用に定義されている:
171 .in +4n
172 .TS
173 lB l l.
174 S_IFMT  0170000 ファイル種別を示すビット領域を表すビットマスク
175 S_IFSOCK        0140000 ソケット
176 S_IFLNK 0120000 シンボリックリンク
177 S_IFREG 0100000 通常のファイル
178 S_IFBLK 0060000 ブロック・デバイス
179 S_IFDIR 0040000 ディレクトリ
180 S_IFCHR 0020000 キャラクター・デバイス
181 S_IFIFO 0010000 FIFO
182 S_ISUID 0004000 set\-user\-ID bit
183 S_ISGID 0002000 set\-group\-ID bit (下記参照)
184 S_ISVTX 0001000 スティッキー・ビット (下記参照)
185 S_IRWXU 00700   ファイル所有者のアクセス許可用のビットマスク
186 S_IRUSR 00400   所有者の読み込み許可
187 S_IWUSR 00200   所有者の書き込み許可
188 S_IXUSR 00100   所有者の実行許可
189 S_IRWXG 00070   グループのアクセス許可用のビットマスク
190 S_IRGRP 00040   グループの読み込み許可
191 S_IWGRP 00020   グループの書き込み許可
192 S_IXGRP 00010   グループの実行許可
193 S_IRWXO 00007   他人 (others) のアクセス許可用のビットマスク
194 S_IROTH 00004   他人の読み込み許可
195 S_IWOTH 00002   他人の書き込み許可
196 S_IXOTH 00001   他人の実行許可
197 .TE
198 .in
199 .P
200 set\-group\-ID bit (\fBS_ISGID\fP)  にはいくつかの特殊な使用法がある: ディレクトリに設定した場合には、そのディレクトリが
201 BSD 方式で使用される ことを示す。つまり、そのディレクトリに作成されたファイルのグループID は 作成したプロセスの実効 (effective)
202 グループID ではなく、ディレクトリの グループID を継承する。また、そのディレクトリに作成されたディレクトリにも \fBS_ISGID\fP
203 ビットが設定される。グループ実行ビット (\fBS_IXGRP\fP)  が設定されていないファイルに設定された場合は、 set\-group\-ID
204 ビットはファイル/レコードの 強制的な (mandatory) ロックを表す。
205 .P
206 ディレクトリにスティッキービット (S_ISVTX) が設定された場合は、 そのディレクトリのファイルの名前を変更したり、削除したりできるのは、
207 そのファイルの所有者か、そのディレクトリの所有者か、特権プロセス だけとなる。
208 .SH 返り値
209 成功した場合、0 が返される。 失敗した場合、 \-1 が返され、 \fIerrno\fP に適切な値がセットされる。
210 .SH エラー
211 .TP 
212 \fBEACCES\fP
213 \fIpath\fP が所属するディレクトリとその上位のディレクトリのいずれかに 対する検索許可がなかった (\fBpath_resolution\fP(7)
214 も参照のこと)。
215 .TP 
216 \fBEBADF\fP
217 \fIfd\fP が不正である。
218 .TP 
219 \fBEFAULT\fP
220 アドレスが間違っている。
221 .TP 
222 \fBELOOP\fP
223 パスを辿る際に解決すべきシンボリックリンクが多過ぎた。
224 .TP 
225 \fBENAMETOOLONG\fP
226 \fIpath\fP が長過ぎる。
227 .TP 
228 \fBENOENT\fP
229 \fIpath\fP の構成要素が存在しないか、 \fIpath\fP が空文字列である。
230 .TP 
231 \fBENOMEM\fP
232 カーネルのメモリが足りない。
233 .TP 
234 \fBENOTDIR\fP
235 \fIpath\fP の前半部分 (prefix) の構成要素がディレクトリではない。
236 .TP 
237 \fBEOVERFLOW\fP
238 (\fBstat\fP()) \fIpath\fP が、ファイルサイズを \fIoff_t\fP 型で表現できないファイルを
239 参照している。このエラーが起こるのは、32 ビットプラットフォーム上で
240 \fI\-D_FILE_OFFSET_BITS=64\fP を指定せずにコンパイルされたアプリケーションが、
241 ファイルサイズが \fI(1<<31)\-1\fP ビットを超えるファイルに対して \fBstat\fP()
242 を呼び出した場合である。
243 .SH 準拠
244 .\" SVr4 documents additional
245 .\" .BR fstat ()
246 .\" error conditions EINTR, ENOLINK, and EOVERFLOW.  SVr4
247 .\" documents additional
248 .\" .BR stat ()
249 .\" and
250 .\" .BR lstat ()
251 .\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
252 これらのシステムコールは SVr4, 4.3BSD, POSIX.1\-2001 に準拠している。 \fBstat\fP()  と \fBfstat\fP()
253 コールは SVr4, SVID, POSIX, X/OPEN, 4.3BSD に準拠している。 \fBlstat\fP()  コールは 4.3BSD と
254 SVr4 に準拠している。
255
256 POSIX.1\-2001 では、シンボリックリンクに対する \fBlstat\fP() で
257 有効な情報を返すように求められていたのは、 \fIstat\fP 構造体の \fIst_size\fP
258 と \fIst_mode\fP のファイル種別要素だけであった。
259 POSIX.1\-2008 では規定が厳しくなり、 \fBlstat\fP() は \fIst_mode\fP の
260 アクセス許可ビット以外の全てのフィールドに有効な情報を返すことが
261 求められるようになっている。
262
263 \fIst_blocks\fP と \fIst_blksize\fP フィールドの使用はあまり移植性がない
264 (これらのフィールドは BSD によって導入された。 システムごとに解釈が
265 異なっており、 NFS マウントの場合には同じシステムでも異なる可能性がある)。
266 \fI<sys/stat.h>\fP から \fIblkcnt_t\fP の \fIblksize_t\fP 型定義を
267 読み込みたい場合は、(\fIどの\fPヘッダファイルをインクルードするよりも前に)
268 \fB_XOPEN_SOURCE\fP を 500 以上の値で定義すること。
269 .LP
270 POSIX.1\-1990 には \fBS_IFMT\fP, \fBS_IFSOCK\fP, \fBS_IFLNK\fP, \fBS_IFREG\fP,
271 \fBS_IFBLK\fP, \fBS_IFDIR\fP, \fBS_IFCHR\fP, \fBS_IFIFO\fP, \fBS_ISVTX\fP 定数に関する
272 記述はなかったが、代わりに \fBS_ISDIR\fP() のようなマクロを使用するように
273 要求していた。 \fBS_IF*\fP 定数は POSIX.1\-2011 以降には存在する。
274
275 マクロ \fBS_ISLNK\fP() と \fBS_ISSOCK\fP() は POSIX.1\-1996 にはないが、
276 POSIX.1\-2001 には両方とも存在する。 前者は SVID 4 に、後者は SUSv2 に
277 由来している。
278 .LP
279 UNIX V7 (とその後のシステム) は \fBS_IREAD\fP, \fBS_IWRITE\fP, \fBS_IEXEC\fP を持っており、
280 POSIX はその同義語として \fBS_IRUSR\fP, \fBS_IWUSR\fP, \fBS_IXUSR\fP を規定している。
281 .SS 他のシステム
282 各種システムで使用されていた(いる)値:
283 .TS
284 l l l l l.
285 16進   名前  ls      8進数 説明
286 f000    S_IFMT          170000  ファイル種別フィールドのビットマスク
287 0000                    000000  SCO では 使用不能 inode;
288                                 BSD では未知のファイル種別;
289                                 SVID\-v2 と XPG2 では 0 と 0100000 の
290                                 両方が普通のファイル
291 1000    S_IFIFO p|      010000  FIFO (名前付きパイプ)
292 2000    S_IFCHR c       020000  キャラクタ特殊ファイル (V7)
293 3000    S_IFMPC         030000  多重化されたキャラクタ特殊ファイル (V7)
294 4000    S_IFDIR d/      040000  ディレクトリ (V7)
295 5000    S_IFNAM         050000  XENIX 二つの副型を持つ名前付きの
296                                 特殊ファイル
297                                 副型は \fIst_rdev\fP の値 1,2 で区別される:
298 0001    S_INSEM s       000001  XENIX IFNAMのセマフォー副型
299 0002    S_INSHD m       000002  XENIX IFNAMの共有データ副型
300 6000    S_IFBLK b       060000  ブロック特殊ファイル (V7)
301 7000    S_IFMPB         070000  多重化されたブロック特殊ファイル (V7)
302 8000    S_IFREG \-      100000  通常ファイル (V7)
303 9000    S_IFCMP         110000  VxFS 圧縮ファイル
304 9000    S_IFNWK n       110000  ネットワーク特殊ファイル (HP\-UX)
305 a000    S_IFLNK l@      120000  シンボリックリンク (BSD)
306 b000    S_IFSHAD                130000  Solaris ACL のための隠された inode
307                                 (ユーザ空間からは見えない)
308 c000    S_IFSOCK        s=      140000  ソケット (BSD; VxFS の "S_IFSOC")
309 d000    S_IFDOOR        D>      150000  Solaris ドア・ファイル
310 e000    S_IFWHT w%      160000  BSD 空白ファイル (inode を使用しない)
311 0200    S_ISVTX         001000  `スティッキー・ビット':使用後も
312                                 スワップに残す (V7)
313                                 予約 (SVID\-v2)
314                                 ディレクトリ以外: ファイルをキャッシュ
315                                 しない (SunOS)
316                                 ディレクトリ: 削除制限フラグ (SVID\-v4.2)
317 0400    S_ISGID         002000  実行時の set\-group\-ID (V7)
318                                 ディレクトリに対しては GID の伝達に
319                                 BSD 方式を使用する
320 0400    S_ENFMT         002000  System V ファイルロックを強制する
321                                 (S_ISGID と共有)
322 0800    S_ISUID         004000  実行時の set\-user\-ID (V7)
323 0800    S_CDF           004000  ディレクトリが状況依存ファイル
324                                 (HP\-UX)
325 .TE
326
327 スティッキー コマンドは Version 32V AT&T UNIX で登場した。
328 .SH 注意
329 .\" As at kernel 2.6.25, XFS and JFS support nanosecond timestamps,
330 .\" but ext2, ext3, and Reiserfs do not.
331 カーネル 2.5.48 以降では、 \fIstat\fP 構造体は 3 つのファイルのタイムスタンプ
332 関連のフィールドでナノ秒単位の精度に対応している。 glibc では、機能検査
333 マクロ \fB_BSD_SOURCE\fP か \fB_SVID_SOURCE\fP が定義された場合に、各フィールドの
334 ナノ秒の情報を \fIst_atim.tv_nsec\fP という形式の名前で公開する。
335 これらのフィールドは POSIX.1\-2008 で規定されており、
336 バージョン 2.12 以降の glibc では、
337 \fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義されるか、
338 \fB_XOPEN_SOURCE\fP が 700 以上の値で定義された場合に、
339 これらのフィールドが公開される。
340 上記のマクロのいずれも定義されていない場合、ナノ秒の値は
341 \fIst_atimensec\fP という形式の名前で公開される。
342 秒より細かいタイムスタンプをサポートしていないファイルシステムでは、
343 ナノ秒のフィールドは 0 に設定される。
344
345 Linux では、 \fBlstat\fP() は一般には自動マウント動作 (automounter action) の
346 きっかけとならないが、 \fBstat\fP() はきっかけとなる (\fBfstatat\fP(2) を参照)。
347
348 \fI/proc\fP ディレクトリ以下にあるファイルのほとんどでは、 \fBstat\fP()  を呼び出した際に、 \fIst_size\fP
349 フィールドにファイルサイズが返されない。 代わりに \fIst_size\fP フィールドには 0 が返される。
350 .SS 背後のカーネル・インタフェース
351 .\"
352 .\" A note from Andries Brouwer, July 2007
353 .\"
354 .\" > Is the story not rather more complicated for some calls like
355 .\" > stat(2)?
356 .\"
357 .\" Yes and no, mostly no. See /usr/include/sys/stat.h .
358 .\"
359 .\" The idea is here not so much that syscalls change, but that
360 .\" the definitions of struct stat and of the types dev_t and mode_t change.
361 .\" This means that libc (even if it does not call the kernel
362 .\" but only calls some internal function) must know what the
363 .\" format of dev_t or of struct stat is.
364 .\" The communication between the application and libc goes via
365 .\" the include file <sys/stat.h> that defines a _STAT_VER and
366 .\" _MKNOD_VER describing the layout of the data that user space
367 .\" uses. Each (almost each) occurrence of stat() is replaced by
368 .\" an occurrence of xstat() where the first parameter of xstat()
369 .\" is this version number _STAT_VER.
370 .\"
371 .\" Now, also the definitions used by the kernel change.
372 .\" But glibc copes with this in the standard way, and the
373 .\" struct stat as returned by the kernel is repacked into
374 .\" the struct stat as expected by the application.
375 .\" Thus, _STAT_VER and this setup cater for the application-libc
376 .\" interface, rather than the libc-kernel interface.
377 .\"
378 .\" (Note that the details depend on gcc being used as c compiler.)
379 時間の経過とともに、 \fIstat\fP 構造体のサイズが大きくなり、この影響で \fBstat\fP()  には 3つのバージョンが存在する:
380 \fIsys_stat\fP()  (スロットは \fI__NR_oldstat\fP)、 \fIsys_newstat\fP()  (スロットは
381 \fI__NR_stat\fP)、 \fIsys_stat64\fP()  (カーネル 2.4 で導入; スロットは \fI__NR_stat64\fP).  glibc
382 の \fBstat\fP()  ラッパー関数はこれらの詳細をアプリケーションから隠蔽してくれる。
383 具体的には、カーネルが提供しているシステムコールのうち最新のバージョンを 起動し、古いバイナリの場合には必要に応じて返された情報を再構成
384 (repack) する。 \fBfstat\fP()  と \fBlstat\fP()  についても同様である。
385 .SH 例
386 以下のプログラムは \fBstat\fP()  を呼び出し、返ってきた \fIstat\fP 構造体のフィールドのいくつかを表示する。
387 .nf
388
389 #include <sys/types.h>
390 #include <sys/stat.h>
391 #include <time.h>
392 #include <stdio.h>
393 #include <stdlib.h>
394
395 int
396 main(int argc, char *argv[])
397 {
398     struct stat sb;
399
400     if (argc != 2) {
401         fprintf(stderr, "Usage: %s <pathname>\en", argv[0]);
402         exit(EXIT_FAILURE);
403     }
404
405     if (stat(argv[1], &sb) == \-1) {
406         perror("stat");
407         exit(EXIT_FAILURE);
408     }
409
410     printf("File type:                ");
411
412     switch (sb.st_mode & S_IFMT) {
413     case S_IFBLK:  printf("block device\en");            break;
414     case S_IFCHR:  printf("character device\en");        break;
415     case S_IFDIR:  printf("directory\en");               break;
416     case S_IFIFO:  printf("FIFO/pipe\en");               break;
417     case S_IFLNK:  printf("symlink\en");                 break;
418     case S_IFREG:  printf("regular file\en");            break;
419     case S_IFSOCK: printf("socket\en");                  break;
420     default:       printf("unknown?\en");                break;
421     }
422
423     printf("I\-node number:            %ld\en", (long) sb.st_ino);
424
425     printf("Mode:                     %lo (octal)\en",
426             (unsigned long) sb.st_mode);
427
428     printf("Link count:               %ld\en", (long) sb.st_nlink);
429     printf("Ownership:                UID=%ld   GID=%ld\en",
430             (long) sb.st_uid, (long) sb.st_gid);
431
432     printf("Preferred I/O block size: %ld bytes\en",
433             (long) sb.st_blksize);
434     printf("File size:                %lld bytes\en",
435             (long long) sb.st_size);
436     printf("Blocks allocated:         %lld\en",
437             (long long) sb.st_blocks);
438
439     printf("Last status change:       %s", ctime(&sb.st_ctime));
440     printf("Last file access:         %s", ctime(&sb.st_atime));
441     printf("Last file modification:   %s", ctime(&sb.st_mtime));
442
443     exit(EXIT_SUCCESS);
444 }
445 .fi
446 .SH 関連項目
447 \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2), \fBfstatat\fP(2), \fBreadlink\fP(2),
448 \fButime\fP(2), \fBcapabilities\fP(7), \fBsymlink\fP(7)