aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man2/stat.2
blob: 3239c9352b8cec853b53c9cf17aea92252a3b473 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
.\" Copyright (c) 1980, 1991, 1993, 1994
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)stat.2	8.4 (Berkeley) 5/1/95
.\" %FreeBSD: src/lib/libc/sys/stat.2,v 1.16.2.6 2001/08/31 10:15:15 ru Exp %
.\"
.\" $FreeBSD: doc/ja_JP.eucJP/man/man2/stat.2,v 1.5 2001/08/19 07:14:27 horikawa Exp $
.Dd May 1, 1995
.Dt STAT 2
.Os
.Sh 名称
.Nm stat ,
.Nm lstat ,
.Nm fstat
.Nd ファイルステータスの取得
.Sh ライブラリ
.Lb libc
.Sh 書式
.Fd #include <sys/types.h>
.Fd #include <sys/stat.h>
.Ft int
.Fn stat "const char *path" "struct stat *sb"
.Ft int
.Fn lstat "const char *path" "struct stat *sb"
.Ft int
.Fn fstat "int fd" "struct stat *sb"
.Sh 解説
.Fn stat
関数は、
.Fa path
が指すファイルの情報を取得します。
指定したファイルの読取り権、書込み権、実行権は必要ありません。
しかし、そのファイルへ至るパス名で列挙されたすべてのディレクトリは、
検索可能であることが必要です。
.Pp
.Fn lstat
は
.Fn stat
に似ていますが、指定したファイルがシンボリックリンクである場合は異なります。
.Fn lstat
はリンクの情報を戻しますが、
.Fn stat
はリンクが参照するファイルの情報を返します。
.Pp
.Fn fstat
は、ファイル記述子
.Fa fd
で区別されるオープンファイルについて、上と同じ情報を取得します。
.Pp
引数
.Fa sb
は、構造体
.Fn stat
へのポインタです。これは、
.Aq Pa sys/stat.h
(下記参照) で定義され、ファイルに関する情報を保持します。
.Bd -literal
struct stat {
    dev_t     st_dev;           /* inode のデバイス */
    ino_t     st_ino;           /* inode 番号 */
    mode_t    st_mode;          /* inode 保護モード */
    nlink_t   st_nlink;         /* ハードリンク数 */
    uid_t     st_uid;           /* ファイル所有者のユーザ ID */
    gid_t     st_gid;           /* ファイルグループのグループ ID */
    dev_t     st_rdev;          /* デバイスタイプ */
#ifndef _POSIX_SOURCE
    struct timespec st_atimespec; /* 最後のアクセス時刻 */
    struct timespec st_mtimespec; /* 最後のデータ修正時刻 */
    struct timespec st_ctimespec; /* 最後のファイルステータス修正時刻 */
#else
    time_t    st_atime;         /* 最後のアクセス時刻 */
    long      st_atimensec;     /* 最後のアクセス時刻のナノ秒 */
    time_t    st_mtime;         /* 最後のデータ修正時刻 */
    long      st_mtimensec;     /* 最後のデータ修正時刻のナノ秒 */
    time_t    st_ctime;         /* 最後のファイルステータス修正時刻 */
    long      st_ctimensec;     /* 最後のファイルステータス修正時刻のナノ秒 */
#endif
    off_t     st_size;          /* バイト単位のファイルの大きさ */
    int64_t   st_blocks;        /* ファイルに割り当てられたブロック数 */
    u_int32_t st_blksize;       /* 入出力に最適なブロックサイズ */
    u_int32_t st_flags;         /* ファイルに対するユーザ定義フラグ */
    u_int32_t st_gen;           /* ファイル生成番号 */
};
.Ed
.Pp
.Fa struct stat
の時刻に関するフィールドは、以下のとおりです。
.Bl -tag -width XXXst_mtime
.It st_atime
ファイルのデータが最後にアクセスされた時刻。
.Xr mknod 2 ,
.Xr utimes 2 ,
.Xr read 2
システムコールで変更されます。
.It st_mtime
ファイルのデータが最後に修正された時刻。
.Xr mknod 2 ,
.Xr utimes 2 ,
.Xr write 2
システムコールで変更されます。
.It st_ctime
ファイルステータスが最後に変更された時刻 (inode データの修正)。
.Xr chmod 2 ,
.Xr chown 2 ,
.Xr link 2 ,
.Xr mknod 2 ,
.Xr rename 2 ,
.Xr unlink 2 ,
.Xr utimes 2 ,
.Xr write 2
システムコールで変更されます。
.El
.Pp
.Dv _POSIX_SOURCE
が定義されていない場合、時刻に関するフィールドは以下のように定義されます。
.Bd -literal
#ifndef _POSIX_SOURCE
#define st_atime st_atimespec.tv_sec
#define st_mtime st_mtimespec.tv_sec
#define st_ctime st_ctimespec.tv_sec
#endif
.Ed
.Pp
.Fa struct stat
のサイズに関するフィールドは、以下のとおりです。
.Bl -tag -width XXXst_blksize
.It st_blksize
ファイルの最適な入出力ブロックサイズ。
.It st_blocks
ファイルに 512 バイト単位で割り当てられたブロックの実際の数。
短いシンボリックリンクが i ノードに保持されている場合、この数値が
0 になることがあります。
.El
.Pp
ステータス情報ワード
.Fa st_mode
には、以下のようなビットがあります。
.Bd -literal
#define S_IFMT 0170000           /* ファイルのタイプ */
#define        S_IFIFO  0010000  /* 名前付きパイプ (fifo) */
#define        S_IFCHR  0020000  /* キャラクタ型特殊ファイル */
#define        S_IFDIR  0040000  /* ディレクトリ */
#define        S_IFBLK  0060000  /* ブロック方特殊ファイル */
#define        S_IFREG  0100000  /* 通常 */
#define        S_IFLNK  0120000  /* シンボリックリンク */
#define        S_IFSOCK 0140000  /* ソケット */
#define        S_IFWHT  0160000  /* ホワイトアウト */
#define S_ISUID 0004000  /* 実行時にユーザ ID を設定 */
#define S_ISGID 0002000  /* 実行時にグループ ID を設定 */
#define S_ISVTX 0001000  /* 使用後にもスワップされたテキストを保存 */
#define S_IRUSR 0000400  /* 読み込み権限の所有者 */
#define S_IWUSR 0000200  /* 書き込み権限の所有者 */
#define S_IXUSR 0000100  /* 実行/検索権限の所有者 */
.Ed
アクセスモードのリストについては、
.Aq Pa sys/stat.h ,
.Xr access 2 ,
.Xr chmod 2
を参照してください。
.Sh 戻り値
問題なく終了すると 0 が戻されます。
問題が発生すると -1 が戻され、
.Va errno
にそのエラーを示す値が設定されます。
.Sh 互換性
以前のバージョンのシステムでは、
.Li st_dev ,
.Li st_uid ,
.Li st_gid ,
.Li st_rdev ,
.Li st_size ,
.Li st_blksize ,
.Li st_blocks
フィールドに別のタイプを使用していました。
.Sh エラー
.Fn stat
と
.Fn lstat
は、以下のような場合にエラーとなります。
.Bl -tag -width Er
.It Bq Er ENOTDIR
パスの構成要素中にディレクトリ以外のものが含まれています。
.It Bq Er ENAMETOOLONG
パス名の構成要素が 255 文字を越えているか、
またはパス名全体が 1023 文字を越えています。
.It Bq Er ENOENT
指定されたファイルが存在しません。
.It Bq Er EACCES
指定されたパスには、
検索が許可されていないディレクトリが含まれています。
.It Bq Er ELOOP
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
.It Bq Er EFAULT
.Fa sb
か
.Em name
は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
.It Bq Er EIO
ファイルシステムでの読み書き中に入出力エラーが発生しました。
.El
.Pp
.Fn fstat
は、以下のような場合にエラーとなります。
.Bl -tag -width Er
.It Bq Er EBADF
.Fa fd
が、有効な記述子ではありません。
.It Bq Er EFAULT
.Fa sb
は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
.It Bq Er EIO
ファイルシステムに読み書きしている間に入出力エラーが発生しました。
.El
.Sh 関連項目
.Xr access 2 ,
.Xr chmod 2 ,
.Xr chown 2 ,
.Xr utimes 2 ,
.Xr symlink 7
.Sh バグ
.Fn fstat
をソケット (およびパイプ) に適用すると、ブロックサイズフィールド、
および固有デバイスと i ノード番号以外に 0 の入ったバッファが戻されます。
.Sh 規格
.Fn stat
関数呼び出しと
.Fn fstat
関数呼び出しは、
.St -p1003.1-90
に準拠しています。
.Sh 歴史
.Fn stat
関数呼び出しと
.Fn fstat
関数呼び出しは、
.At v7
で登場しました。
.Fn lstat
関数呼び出しは
.Bx 4.2
で登場しました。
.\" Amended by N.Kumagai 2000-3-18