共用方式為


_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 ,或者在 buffer 為 NULL 時被設為 EINVAL 。

備註

_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 ,否則為零。

  • st_size
    檔案的大小 (以位元組為單位)。

如果 fd 參考一個裝置, st_atime 、 st_ctime 、 st_mtime 和 st_size 欄位不具意義。

由於 Stat.h 使用在 Types.h 定義的 _dev_t 型別,您必須在 Stat.h 之前包含 Types.h 在您的程式碼。

使用 __stat64 結構的 _fstat64 允許檔案建立時間表示至多為世界統一時間 3000 年 12 月 31 日的 23:59:59 。而其他函式只允許為世界統一時間 2038 年 1 月 19 日的 03:14:07。 1970 年 1 月 1 日的午夜是這些函式的時間日期範圍的下界。

這些函式的變形支援 32 位元或 64 位元的時間型別與 32 位元或 64 位元的檔案長度。 第一個數字後綴 (32 或 64) 表示使用的時間型別的大小,第二個後綴是 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

未定義 _MBCS

64 位元

32 位元

_fstat

已定義

32 位元

32 位元

_fstat32

不受巨集定義影響

32 位元

32 位元

_fstat64

不受巨集定義影響

64 位元

64 位元

_fstati64

未定義

64 位元

64 位元

_fstati64

已定義

32 位元

64 位元

_fstat32i64

不受巨集定義影響

32 位元

64 位元

_fstat64i32

不受巨集定義影響

64 位元

32 位元

需求

Function

必要的標頭檔

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

.NET Framework 對等用法

不適用。 若要呼叫標準 C 函式,請使用 PInvoke。 如需更多的資訊,請參閱 平台調用範例 (Platform Invoke Examples)

請參閱

參考

檔案處理

_access _waccess

_chmod _wchmod

_filelength _filelengthi64

_stat,_wstat 函式