Share via


_fstat、_fstat32、_fstat64、_fstati64、_fstat32i64、_fstat64i32

更新 : 2007 年 11 月

開いているファイルに関する情報を取得します。

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 ビットのファイル長がサポートされています。1 つ目の数値サフィックス (32 または 64) は、使用される時刻型のサイズを示します。2 番目のサフィックスは i32 または i64 になり、ファイル サイズが 32 ビット整数と 64 ビット整数のどちらで表されているかを示します。

Visual C++ 2005 では、_fstat は _fstat64i32 に相当し、struct_stat には、64 ビットの時刻が格納されます。_USE_32BIT_TIME_T が定義されない限り、これが当てはまります。_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 );
}

File size     : 16
Time modified : Wed May 07 15:25:11 2003

.NET Framework の相当するアイテム

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

ファイル処理

_access、_waccess

_chmod、_wchmod

_filelength、_filelengthi64

_stat、_wstat 関数