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;
}