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