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_devst_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

名称
ライブラリ
書式
解説
戻り値
互換性
エラー
関連項目
バグ
規格
歴史

jman



Time: 07:06:28 GMT, January 12, 2009