名前 | 形式 | 機能説明 | 戻り値 | エラー | 使用法 | 属性 | Trusted Solars での変更点 | 関連項目 | 注意事項
#include <sys/types.h> #include <sys/stat.h>int stat(const char *path, struct stat *buf);
stat() 関数は、path で指定したファイルの情報を取得します。このファイルの読み取り権、書き込み権、実行権は必要ありませんが、パス名に指定されたすべてのディレクトリはファイルに至るまで検索可能でなければなりません。
lstat() 関数は、指定されたファイルがシンボリックリンクである場合を除き、stat() と同じファイル属性を取得します。シンボリックリンクの場合には、lstat() はリンクの情報を返し、stat() はリンク先のファイルの情報を返します。
fstat() 関数は、ファイル記述子 fildes で識別するオープンファイルの情報を取得します。fildes は、open(2)、creat(2)、dup(2)、fcntl(2)、または pipe(2) 関数の正常な実行によって取得されるものです。
buf 引数は、ファイルに関する情報が格納されている stat 構造体へのポインタです。stat 構造体は次のメンバーから構成されます。
mode_t st_mode; /* File mode (see mknod(2)) */ ino_t st_ino; /* Inode number */ dev_t st_dev; /* ID of device containing */ /* a directory entry for this file */ dev_t st_rdev; /* ID of device */ /* This entry is defined only for */ /* char special or block special files */ nlink_t st_nlink; /* Number of links */ uid_t st_uid; /* User ID of the file's owner */ gid_t st_gid; /* Group ID of the file's group */ off_t st_size; /* File size in bytes */ time_t st_atime; /* Time of last access */ time_t st_mtime; /* Time of last data modification */ time_t st_ctime; /* Time of last file status change */ /* Times measured in seconds since */ /* 00:00:00 UTC, Jan. 1, 1970 */ long st_blksize; /* Preferred I/O block size */ blkcnt_t st_blocks; /* Number of 512 byte blocks allocated*/
構造体メンバーの意味は次のとおりです。
mknod(2) で述べられているファイルのモード。mknod() で述べられているモードの他に、ファイルがシンボリックリンクのときの、モードとして S_IFLNK があります。S_IFLNK を返すのは lstat() だけです。
このフィールドは、個々のファイルシステムのファイルを固有に識別します。通常ファイルは、st_ino と st_dev のペアで固有に識別されます。
このフィールドは、ファイルが含まれているファイルシステムを固有に識別します。この値を ustat() 関数の入力に使うことで、ファイルシステムに関する情報をさらに特定できます。この値にそれ以外の意味はありません。
このフィールドは管理コマンドのみで使用されます。このフィールドはブロック型特殊ファイルと文字型特殊ファイルに対してのみ有効なため、それらのファイルが設定されているシステムでのみ意味があります。
このフィールドは管理コマンドのみで使用されます。
ファイルの所有者のユーザー ID
ファイルのグループ ID
通常ファイルの場合、これはファイルの終わりを示すアドレスです。ブロック型特殊ファイルや文字型特殊ファイルの場合、これは未定義です。pipe(2) のマニュアルページも参照してください。
ファイルデータが最後にアクセスされた時刻。これを変更する関数は creat()、mknod()、pipe()、utime(2)、および read(2) です。
ファイルデータが最後に変更された時刻。これを変更する関数は creat()、mknod()、pipe()、utime()、および write(2) です。
ファイルステータスが最後に変更された時刻。これを変更する関数は chmod()、chown()、 creat()、 link(2)、 mknod()、 pipe()、 unlink(2)、utime()、および write() です。
入出力操作に「最適な」ユニットサイズを示すヒント情報。このフィールドは、ブロック型特殊ファイルや文字型特殊ファイルに対しては定義されていません
ディスクに実際に割り当てられている物理ブロック (512 バイト) の合計数。このフィールドは、ブロック型特殊ファイルや文字型特殊ファイルに対しては定義されていません。
stat()、lstat()、および fstat() 関数には、path の最後の構成要素に対する必須読み取り権が必要です。ファイル記述子が書き込みに対してのみオープンされている場合は、記述子が参照するオブジェクトに対する必須読み取り権が fstat() に必要です。これらの制約を除くには、呼び出し元プロセスの有効な特権セットに PRIV_FILE_MAC_READ
特権を追加します。
呼び出し元プロセスが必須読み取りアクセス権を持っていない場合、stat()、lstat()、fstat() は、stat 構造体のいくつかのメンバーに固定値を返すことがあります。
次の条件に該当する場合、stat()、fstat()、および lstat() 関数は異常終了します。
ファイルまたはファイルシリアル番号に割り当てられたファイルサイズ (バイト数またはブロック数) を buf が指す構造体で正しく表すことができない場合。
次の条件のいずれかに該当する場合、stat() と lstat() 関数は異常終了します。
パス内に検索権が許可されていない構成要素がある場合。
この制約を除くには、呼び出し元プロセスに PRIV_FILE_DAC_SEARCH
か PRIV_FILE_MAC_SEARCH
特権のいずれかまたは両方を与えます。
buf または path 引数が不当なアドレスを指している場合。
stat() か lstat() 関数の実行中にシグナルを受け取った場合。
path を解析した際に検出されたシンボリックリンクの数が多すぎる場合。
_POSIX_NO_TRUNC が有効なときに、path 引数の長さが PATH_MAX を超えているか、path 構成要素の長さが NAME_MAX を超えている場合。
指定されたファイルが存在しないか、NULL パス名が NULL の場合。
path 引数がリモートマシンを指しているが、リンク先のマシンが現在アクティブでない場合。
パス内にディレクトリではない構成要素がある場合。
構成要素が大きすぎて、buf が指す構造体に格納できない場合。
次の条件のいずれかに該当する場合、fstat() 関数は異常終了します。
fildes 引数が、有効なオープンファイル記述子でない場合。
buf 引数が不正なアドレスを指している場合。
fstat() 関数の実行中にシグナルを受け取った場合。
fildes 引数がリモートマシンを指しているが、リンク先のマシンが現在アクティブでない場合。
構成要素が大きすぎて、buf が指す構造体に格納できない場合。
stat()、fstat()、および lstat() 関数には、64 ビットファイルオフセットに対する移行インタフェースがあります。lf64(5) のマニュアルページを参照してください。
次の属性の説明については、attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
MT レベル | fstat() は Async_Single_Safe である。 |
stat()、lstat()、および fstat() 関数には、path の最終構成要素に対する必須読み取り権が必要です。ファイル記述子が書き込みに対してのみオープンされている場合は、記述子が参照するオブジェクトに対する必須読み取り権が fstat() に必要です。これらの制約をのぞくには、呼び出し元プロセスの有効な特権セットに PRIV_FILE_MAC_READ
特権を追加します。
アクセス権の制約を除くには、stat() か lstat() の呼び出し元プロセスに対して PRIV_FILE_DAC_SEARCH
か PRIV_FILE_MAC_SEARCH
特権の一方または両方を与えます。
このインタフェースの使い方によっては、秘密チャネル (covert channel) が使用されることがあります。秘密チャネル (covert channel) を使用すると、プロセスの実行が遅くなることがあります。この遅延を防ぐには、プロセスに対して PRIV_PROC_NODELAY
特権を与えます。
chmod(2) を使って、ACL エントリを持つファイルのグループ所有者アクセス権を変更すると、ファイルのグループ所有者アクセス権と ACL マスクの両方が新しいアクセス権に変更されます。ACL マスクアクセス権が変更されることにより、そのファイルに対して ACL エントリをもつユーザーやグループのアクセス権に影響を及ぼす可能性があるので注意が必要です。
名前 | 形式 | 機能説明 | 戻り値 | エラー | 使用法 | 属性 | Trusted Solars での変更点 | 関連項目 | 注意事項