_fstat、_fstat32、_fstat64、_fstati64、_fstat32i64、_fstat64i32
開いているファイルに関する情報を取得します。
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 (ファイル記述子が無効な場合) または EINVAL (buffer が NULL の場合) に設定されます。
解説
_fstat 関数は、fd に関連付けられた開いているファイルの情報を取得し、buffer が指す構造体に格納します。 SYS\Stat.h に定義されている _stat 構造体には、次のフィールドが格納されています。
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 は Types.h で定義されている _dev_t 型を使用するため、コードには Stat.h の前に Types.h をインクルードする必要があります。
__stat64 構造体を使用する _fstat64 は、世界協定時刻 (UTC: Coordinated Universal Time) 3000 年 12 月 31 日の 23:59:59 までのファイル作成日を表すことができます。他の関数は、UTC 2038 年 1 月 19 日の 03:14:07 までしか表すことができません。 これらの関数の日付範囲の下限は、すべて 1970 年 1 月 1 日の午前零時です。
これらの関数のバリエーションにより、32 ビットまたは 64 ビットの時刻型、および 32 ビットまたは 64 ビットのファイル長がサポートされています。 最初の数字サフィックス (32 または 64) は使用されている時刻型のサイズを表し、2 番目のサフィックス (i32 または i64) はファイル サイズが 32 ビットまたは 64 ビットのどちらの整数値で表されているかを示します。
_fstat相当する_fstat64i32、およびstruct_stat、64 ビットの時刻が含まれています。 この動作は、_USE_32BIT_TIME_T が定義されていない場合に適用されます。これが定義されている場合は、以前の動作が有効になります。つまり、_fstat は 32 ビットの時刻を使用し、struct_stat には 32 ビットの時刻が格納されます。 これは、_fstati64 の場合も同じです。
_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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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 );
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。