_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。 _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
    总是 1 对非 NTFS 文件系统。

  • 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。

_fstat64使用 __stat64 结构,允许文件创建日期表示23:59:59,3000 年 12 月 31 日,UTC;而其他函数只能表示 03:14:07 1 月 19 日 2038 年,UTC。 1970 年 1 月 1 日 00:00:00,是所有这些函数的下限的日期范围。

这些函数的变量支持 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。

_findnext 的时间类型和文件长度键入变量

函数

已定义 _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> and <sys/types.h>

_fstat32

<sys/stat.h> and <sys/types.h>

_fstat64

<sys/stat.h> and <sys/types.h>

_fstati64

<sys/stat.h> and <sys/types.h>

_fstat32i64

<sys/stat.h> and <sys/types.h>

_fstat64i32

<sys/stat.h> and <sys/types.h>

有关更多兼容性信息,请参见“简介”中的兼容性

示例

// 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。有关更多信息,请参见平台调用示例

请参见

参考

文件处理

_access、_waccess

_chmod、_wchmod

_filelength、_filelengthi64

_stat、_wstat 函数