stat(2) FreeBSD 一般コマンドマニュアル

stat

前のページ 上に戻る 次のページ

stat




書式

     #include <sys/types.h>
     #include <sys/stat.h>

     int
     stat(const char *path, struct stat *sb);

     int
     lstat(const char *path, struct stat *sb);

     int
     fstat(int fd, struct stat *sb);


解説

     stat() 関数は、 path が指すファイルの情報を取得します。指定したファイルの
     読取り権、書込み権、実行権は必要ありません。しかし、そのファイルへ至るパ
     ス名で列挙されたすべてのディレクトリは、検索可能であることが必要です。

     lstat() は stat() に似ていますが、指定したファイルがシンボリックリンクで
     ある場合は異なります。 lstat() はリンクの情報を戻しますが、 stat() はリン
     クが参照するファイルの情報を返します。

     fstat() は、ファイル記述子 fd で区別されるオープンファイルについて、上と
     同じ情報を取得します。

     引数 sb は、構造体 stat() へのポインタです。これは、 <sys/stat.h> (下記参
     照) で定義され、ファイルに関する情報を保持します。

     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;       /* 入出力に最適なブロックサイズ */
                  unlink(2), utimes(2), write(2) システムコールで変更されま
                  す。

     _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

     struct stat のサイズに関するフィールドは、以下のとおりです。

     st_blksize     ファイルの最適な入出力ブロックサイズ。

     st_blocks      ファイルに 512 バイト単位で割り当てられたブロックの実際の
                    数。短いシンボリックリンクが i ノードに保持されている場
                    合、この数値が 0 になることがあります。

     ステータス情報ワード 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  /* 実行/検索権限の所有者 */
     アクセスモードのリストについては、 <sys/stat.h>, access(2), chmod(2) を参
     照してください。


戻り値

     成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、
     グローバル変数 errno が設定されてエラーを示します。


互換性

     以前のバージョンのシステムでは、 st_dev, st_uid, st_gid, st_rdev,
     st_size, st_blksize, st_blocks フィールドに別のタイプを使用していました。


エラー

     stat() と lstat() は、以下のような場合にエラーとなります。

     [ENOTDIR]          パスの構成要素中にディレクトリ以外のものが含まれていま
                        範囲外を指しています。

     [EIO]              ファイルシステムでの読み書き中に入出力エラーが発生しま
                        した。

     fstat() は、以下のような場合にエラーとなります。

     [EBADF]            fd が、有効な記述子ではありません。

     [EFAULT]           sb は、プロセスに割り当てられたアドレス空間の範囲外を
                        指しています。

     [EIO]              ファイルシステムに読み書きしている間に入出力エラーが発
                        生しました。


関連項目

     access(2), chmod(2), chown(2), utimes(2), symlink(7)


バグ

     fstat() をソケット (およびパイプ) に適用すると、ブロックサイズフィール
     ド、および固有デバイスと i ノード番号以外に 0 の入ったバッファが戻されま
     す。


規格

     stat() 関数呼び出しと fstat() 関数呼び出しは、 ISO/IEC 9945-1:1990
     (``POSIX.1'') に準拠しています。


歴史

     stat() 関数呼び出しと fstat() 関数呼び出しは、 Version 7 AT&T UNIX で登場
     しました。 lstat() 関数呼び出しは 4.2BSD で登場しました。

FreeBSD 4.4                       May 1, 1995                      FreeBSD 4.4

ABELNET VPSサービス