開いているファイルに関する情報を取得します。
構文
int _fstat(
int fd,
struct _stat *buffer
);
int _fstat32(
int fd,
struct _stat32 *buffer
);
int _fstat64(
int fd,
struct _stat64 *buffer
);
int _fstati64(
int fd,
struct _stati64 *buffer
);
int _fstat32i64(
int fd,
struct _stat32i64 *buffer
);
int _fstat64i32(
int fd,
struct _stat64i32 *buffer
);
パラメーター
fd
開いているファイルのファイル記述子。
buffer
結果を格納する構造体へのポインター。
戻り値
ファイルのステータス情報が取得されると、0 を返します。 戻り値 -1 はエラーを示します。 ファイル記述子が無効な場合または buffer
が NULL
である場合、「パラメーターの検証」で説明されているとおり、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、無効なファイル記述子の場合は errno
が EBADF
に設定され、buffer
が NULL
である場合は、EINVAL
に設定されます。
解説
_fstat
関数は、 fd
に関連付けられている開いているファイルに関する情報を取得し、buffer
によって示される構造体にそれを格納します。 _stat
構造体 (SYS\Stat.h
で定義される) には、次のフィールドが含まれています。
フィールド | 意味 |
---|---|
st_atime |
ファイルの最後のアクセスの時間。 |
st_ctime |
ファイルの作成の時間。 |
st_dev |
デバイスの場合は fd 、それ以外の場合は 0 です。 |
st_mode |
ファイル モード情報のビット マスク。 fd がデバイスを参照している場合は、_S_IFCHR ビットが設定されます。 fd が通常のファイルを参照している場合は、_S_IFREG ビットが設定されます。 読み取り/書き込みのビットは、ファイルのアクセス許可モードに応じて設定されます。 _S_IFCHR およびその他の定数は SYS\Stat.h で定義されます。 |
st_mtime |
ファイルの最終変更時刻。 |
st_nlink |
非 NTFS ファイル システムでは常に 1 です。 |
st_rdev |
デバイスの場合は fd 、それ以外の場合は 0 です。 |
st_size |
ファイルのサイズ (バイト単位)。 |
fd
がデバイスを参照している場合、st_atime
フィールド、st_ctime
フィールド、st_mtime
フィールド、st_size
フィールドには意味がありません。
Stat.h
は _dev_t
型 (Types.h
で定義される) を使用するため、コード内で Stat.h
の前に Types.h
をインクルードする必要があります。
_stat64
構造体を使用する _fstat64
は、UTC の 3000 年 12 月 31 日の 23 時 59 分 59 秒までのファイル作成日付を表すことができます。それに対して、他の関数は、UTC の 2038 年 1 月 18 日の 23 時 59 分 59 秒までしか表すことができません。 これらの関数の日付範囲の下限は、いずれも 1970 年 1 月 1 日の午前 0 時です。
これらの関数のバリエーションは、32 ビットや 64 ビットの時刻型と、32 ビットや 64 ビットのファイル長をサポートします。 最初の数字のサフィックス (32
または 64
) は、使用される時刻型のサイズを示します。2 番目のサフィックスは i32
または i64
で、ファイル サイズが 32 ビットの整数として表されるか、それとも 64 ビットの整数として表されるかを示します。
_USE_32BIT_TIME_T
が定義されていない限り、_fstat
は _fstat64i32
と同等であり、_stat
には 64 ビットの時刻が含まれます。 _USE_32BIT_TIME_T
が定義されている場合、_fstat
は 32 ビットの時刻を使用し、_stat
には 32 ビットの時刻が含まれます。 同じことが _fstati64
にも当てはまります。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
_stat
の時刻型とファイル長型のバリエーション
関数 | _USE_32BIT_TIME_T は定義済み? |
時刻型 | ファイル長型 |
---|---|---|---|
_fstat |
未定義 | 64 ビット | 32 ビット |
_fstat |
定義済み | 32 ビット | 32 ビット |
_fstat32 |
マクロ定義の影響を受けない | 32 ビット | 32 ビット |
_fstat64 |
マクロ定義の影響を受けない | 64 ビット | 64 ビット |
_fstati64 |
未定義 | 64 ビット | 64 ビット |
_fstati64 |
定義済み | 32 ビット | 64 ビット |
_fstat32i64 |
マクロ定義の影響を受けない | 32 ビット | 64 ビット |
_fstat64i32 |
マクロ定義の影響を受けない | 64 ビット | 32 ビット |
要件
機能 | 必須ヘッダー |
---|---|
_fstat |
<sys/stat.h> および <sys/types.h> |
_fstat32 |
<sys/stat.h> および <sys/types.h> |
_fstat64 |
<sys/stat.h> および <sys/types.h> |
_fstati64 |
<sys/stat.h> および <sys/types.h> |
_fstat32i64 |
<sys/stat.h> および <sys/types.h> |
_fstat64i32 |
<sys/stat.h> および <sys/types.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_fstat.c
// This program uses _fstat to report
// the size of a file named F_STAT.OUT.
#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <share.h>
int main( void )
{
struct _stat buf;
int fd, result;
char buffer[] = "A line to output";
char timebuf[26];
errno_t err;
_sopen_s( &fd,
"f_stat.out",
_O_CREAT | _O_WRONLY | _O_TRUNC,
_SH_DENYNO,
_S_IREAD | _S_IWRITE );
if( fd != -1 )
_write( fd, buffer, strlen( buffer ) );
// Get data associated with "fd":
result = _fstat( fd, &buf );
// Check if statistics are valid:
if( result != 0 )
{
if (errno == EBADF)
printf( "Bad file descriptor.\n" );
else if (errno == EINVAL)
printf( "Invalid argument to _fstat.\n" );
}
else
{
printf( "File size : %ld\n", buf.st_size );
err = ctime_s(timebuf, 26, &buf.st_mtime);
if (err)
{
printf("Invalid argument to ctime_s.");
exit(1);
}
printf( "Time modified : %s", timebuf );
}
_close( fd );
}
File size : 16
Time modified : Wed May 07 15:25:11 2003
関連項目
ファイル処理
$
$
$
_stat
、_wstat
関数