STAT
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
stat
lstat
fstat
- ファイルステータスの取得
索引
ライブラリ
Lb libc
索引
書式
In sys/types.h
In 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
索引
解説
Fn stat
システムコールは、
Fa path
が指すファイルの情報を取得します。
指定したファイルの読取り権、書込み権、実行権は必要ありません。
しかし、そのファイルへ至るパス名で列挙されたすべてのディレクトリは、
検索可能であることが必要です。
Fn lstat
関数は
Fn stat
に似ていますが、指定したファイルがシンボリックリンクである場合は異なります。
Fn lstat
はリンクの情報を戻しますが、
Fn stat
はリンクが参照するファイルの情報を返します。
Fn fstat
システムコールは、ファイル記述子
Fa fd
で区別されるオープンファイルについて、上と同じ情報を取得します。
引数
Fa sb
は、構造体
Vt stat
へのポインタです。
これは、
In sys/stat.h
で定義され、ファイルに関する情報を保持します。
ファイルシステムに関連する
Vt struct stat
のフィールドは以下のとおりです:
- st_dev
-
ファイルを含むデバイスの数値 ID。
- st_ino
-
ファイルの i ノード番号。
- st_nlink
-
ファイルへのハードリンクの数。
st_dev
と
st_ino
フィールドはともにシステム中で唯一のファイルを特定します。
Vt struct stat
の時刻に関するフィールドは、以下のとおりです:
- st_atime
-
ファイルのデータが最後にアクセスされた時刻。
mknod(2),
utimes(2),
read(2)
および
readv(2)
システムコールで変更されます。
- st_mtime
-
ファイルのデータが最後に修正された時刻。
mkdir(2),
mkfifo(2),
mknod(2),
utimes(2),
write(2)
および
writev(2)
システムコールで変更されます。
- st_ctime
-
ファイルステータスが最後に変更された時刻 (inode データの修正)。
chflags(2),
chmod(2),
chown(2),
creat(2),
link(2),
mkdir(2),
mkfifo(2),
mknod(2),
rename(2),
rmdir(2),
symlink(2),
truncate(2),
unlink(2),
utimes(2),
write(2)
および
writev(2)
システムコールで変更されます。
- st_birthtime
-
inode が作成されたときの時刻。
_POSIX_SOURCE
が定義されていない場合、時刻に関するフィールドは以下のように定義されます:
#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
Vt struct stat
のサイズに関するフィールドは、以下のとおりです:
- st_size
-
バイトで表されるファイルサイズ。
- st_blksize
-
ファイルの最適な入出力ブロックサイズ。
- st_blocks
-
ファイルに 512 バイト単位で割り当てられたブロックの実際の数。
短いシンボリックリンクが inode に保持されている場合、この数値が
0 になることがあります。
Vt struct stat
のアクセス関連のフィールドは以下のとおりです:
- st_uid
-
ファイルの所有者のユーザID。
- st_gid
-
ファイルのグループID。
- st_mode
-
ファイルの状態 (下記参照)。
ステータス情報ワード
Fa st_mode
には、以下のようなビットがあります:
#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 /* 実行 / 検索権限の所有者 */
アクセスモードのリストについては、
In sys/stat.h ,
access(2),
chmod(2)
を参照してください。
以下のマクロは
Fa m
引数で渡された
st_mode
値が指定されたタイプのファイルに対応しているかどうか
テストするために利用可能です:
- Fn S_ISBLK m
-
ブロック特殊ファイルかどうかテストする。
- Fn S_ISCHR m
-
キャラクタ特殊ファイルかどうかテストする。
- Fn S_ISDIR m
-
ディレクトリかどうかテストする。
- Fn S_ISFIFO m
-
パイプか FIFO 特殊ファイルかどうかテストする。
- Fn S_ISLNK m
-
シンボリックリンクかどうかテストする。
- Fn S_ISREG m
-
通常のファイルかどうかテストする。
- Fn S_ISSOCK m
-
ソケットかどうかテストする。
- Fn S_ISWHT m
-
ホワイトアウトかどうかテストする。
マクロは、テストが真なら 0 以外、またはテストが偽なら 0 に評価します。
索引
戻り値
Rv -std
索引
互換性
以前のバージョンのシステムでは、
st_dev
st_uid
st_gid
st_rdev
st_size
st_blksize
st_blocks
フィールドに別のタイプを使用していました。
索引
エラー
Fn stat
システムコールと
Fn lstat
システムコールは、以下のような場合にエラーとなります:
- Bq Er EACCES
-
指定されたパスには、検索が許可されていないディレクトリが含まれています。
- Bq Er EFAULT
-
Fa sb
引数または
Fa path
引数は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
- Bq Er EIO
-
ファイルシステムでの読み書き中に入出力エラーが発生しました。
- Bq Er ELOOP
-
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
- Bq Er ENAMETOOLONG
-
パス名の構成要素が 255 文字を越えているか、
またはパス名全体が 1023 文字を越えています。
- Bq Er ENOENT
-
指定されたファイルが存在しません。
- Bq Er ENOTDIR
-
パスの構成要素中にディレクトリ以外のものが含まれています。
- Bq Er EOVERFLOW
-
ファイルサイズのバイト数が、
Fa sb
で指されている構造体で正しく表現できません。
Fn fstat
システムコールは、以下のような場合にエラーとなります:
- Bq Er EBADF
-
Fa fd
引数が、有効な記述子ではありません。
- Bq Er EFAULT
-
Fa sb
引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。
- Bq Er EIO
-
ファイルシステムに読み書きしている間に入出力エラーが発生しました。
- Bq Er EOVERFLOW
-
ファイルサイズのバイト数が、
Fa sb
で指されている構造体で正しく表現できません。
索引
関連項目
access(2),
chmod(2),
chown(2),
utimes(2),
symlink(7),
sticky(8)
索引
バグ
Fn fstat
をソケット (およびパイプ) に適用すると、ブロックサイズフィールド、
および固有デバイスと inode 番号以外に 0 の入ったバッファが戻されます。
索引
規格
Fn stat
システムコールと
Fn fstat
システムコールは、
St -p1003.1-90
に適合しています。
索引
歴史
Fn stat
システムコールと
Fn fstat
システムコールは、
AT&T System
v7
で登場しました。
Fn lstat
システムコールは
BSD 4.2
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- 互換性
-
- エラー
-
- 関連項目
-
- バグ
-
- 規格
-
- 歴史
-
Time: 07:06:28 GMT, January 12, 2009