_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 はエラーを示します。 ファイル記述子が無効な場合または bufferNULL である場合、「パラメーターの検証」で説明されているとおり、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、無効なファイル記述子の場合は errnoEBADF に設定され、bufferNULL である場合は、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

関連項目

ファイル処理
_access_waccess
_chmod_wchmod
_filelength_filelengthi64
_stat_wstat 関数