_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 установлено значение для недопустимого дескриптора файла или значение EINVALbuffer if isNULLEBADF.

Замечания

Функция _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_mtimest_atimest_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 он эквивалентен _fstat64i3264-разрядному времени и _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 функции