_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) 。