fstat,stat,_wstat
sys\stat.h:インデックス への移動
ヘッダー ファイル
sys\stat.h
カテゴリ
入出力ルーチン
プロトタイプ
int fstat(int handle, struct stat *statbuf);
int stat(const char *path, struct stat *statbuf);
int _wstat(const wchar_t *path, struct _stat *statbuf);
説明
ファイルの情報を取得します。
fstat は、handle に関連付けられたファイルまたはディレクトリについての情報を、stat 構造体に格納します。
stat は、指定されたファイルまたはディレクトリについての情報を、stat/_stat 構造体に格納します。ファイルの名前は path です。
statbuf は、stat/_stat 構造体(sys\stat.h で定義されてる)へのポインタです。この構造体には、次のフィールドがあります:
st_mode |
ファイルのモードに関する情報を示すビット マスク |
st_dev |
ファイルまたはファイル ハンドル(ファイルがデバイス上にある場合)を保有するディスクのドライブ番号 |
st_rdev |
st_dev と同じ |
st_nlink |
整数定数 1 に設定 |
st_size |
ファイルのサイズ(バイト) |
st_atime |
最終アクセス時(Windows)、または、最終更新時(DOS) |
st_mtime |
st_atimeと同じ |
st_ctime |
st_atimeと同じ |
stat 構造体には、さらに 3 つのフィールドがありますが、ここでは省略します。それらには、UNIX でのみ意味のある値が格納されます。
ファイルのモードに関する情報を提供する st_mode ビット マスクには、次のビットが含まれます:
次のいずれかのビットが設定されます:
S_IFCHR |
ハンドルがデバイスを参照する場合。 |
S_IFREG |
通常ファイルが、ハンドルによって参照される場合。 |
次のいずれか、または両方のビットが設定されます:
S_IWRITE |
ユーザーが、ファイルへの書き込み権限を持っている場合。 |
S_IREAD |
ユーザーが、ファイルへの読み込み権限を持っている場合。 |
HPFS および NTFS ファイル管理システムは、次のような違いがあります:
st_atime |
最終アクセス時 |
st_mtime |
最終変更時 |
st_ctime |
作成時 |
戻り値
fstat および stat は、ファイルについての情報の取得に成功した場合は、0 を返します。
エラー時には(情報の取得に失敗した場合)、これらの関数は -1 を返し、グローバル変数 errno を次の値に設定します:
EBADF |
不正なファイル処理 |
例
#include <sys\stat.h> #include <stdio.h> #include <time.h> int main(void) { struct stat statbuf; FILE *stream; /* open a file for update */ if ((stream = fopen("DUMMY.FIL", "w+")) == NULL) { fprintf(stderr, "Cannot open output file.\n"); return(1); } fprintf(stream, "This is a test"); fflush(stream); /* get information about the file */ fstat(fileno(stream), &statbuf); fclose(stream); /* display the information returned */ if (statbuf.st_mode & S_IFCHR) printf("Handle refers to a device.\n"); if (statbuf.st_mode & S_IFREG) printf("Handle refers to an ordinary file.\n"); if (statbuf.st_mode & S_IREAD) printf("User has read permission on file.\n"); if (statbuf.st_mode & S_IWRITE) printf("User has write permission on file.\n"); printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev); printf("Size of file in bytes: %ld\n", statbuf.st_size); printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime)); return 0; }