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