_fstat
, , _fstat32
_fstati64
_fstat64
_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
установлено значение для недопустимого дескриптора файла или значение EINVAL
buffer
if isNULL
EBADF
.
Замечания
Функция _fstat
получает сведения об открытом файле, который связан с fd
, и сохраняет их в структуре, указанной в параметре buffer
. Структура, определенная _stat
в SYS\Stat.h
, содержит следующие поля.
Поле | Значение |
---|---|
st_atime |
Время последнего доступа к файлу. |
st_ctime |
Время создания файла. |
st_dev |
Для устройства равно fd , в противном случае — 0. |
st_mode |
Битовая маска для информации о файловом режиме. Бит _S_IFCHR устанавливается в том случае, если fd ссылается на устройство. Бит _S_IFREG устанавливается в том случае, если fd ссылается на обычный файл. Биты чтения/записи устанавливаются в соответствии с режимом разрешений файла. _S_IFCHR и другие константы определены в SYS\Stat.h . |
st_mtime |
Время последнего изменения файла. |
st_nlink |
Всегда имеет значение 1 в файловых системах, отличных от NTFS. |
st_rdev |
Для устройства равно fd , в противном случае — 0. |
st_size |
Размер файла в байтах. |
Если fd
ссылается на устройство, st_mtime
st_atime
st_ctime
поля и st_size
поля не имеют значения.
Так как Stat.h
использует тип, определенный _dev_t
в Types.h
коде, необходимо включить Types.h
в Stat.h
код.
Функция _fstat64
, которая использует структуру _stat64
, поддерживает даты создания файла до 23:59:59 31 декабря 3000 года в формате UTC. При этом другие функции представляют даты только до 23:59:59 18 января 2038 года в формате UTC. Нижняя граница диапазона дат для всех этих функций — Полночь, 1 января 1970 года.
Варианты этих функций поддерживают 32- или 64-разрядные типы времени и 32- или 64-разрядные размеры файлов. Первый числовой суффикс (32
или 64
) указывает размер используемого типа времени; второй суффикс i32
или i64
показывает, представлен ли размер файла как 32- или 64-разрядное целое число.
Если не _USE_32BIT_TIME_T
определено, _fstat
он эквивалентен _fstat64i32
64-разрядному времени и _stat
содержит 64-разрядное время. При _USE_32BIT_TIME_T
определении _fstat
использует 32-разрядное время и _stat
содержит 32-разрядное время. Это же справедливо и для _fstati64
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Варианты типа времени и длины файла _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-разрядное |
Требования
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> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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
См. также
Обработка файлов
_access
, _waccess
_chmod
, _wchmod
_filelength
, _filelengthi64
_stat
, _wstat
функции