Поделиться через


_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
    Битовая маска для данных файлового режима. Бит _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_atime, st_ctime, st_mtime и поля st_size не имеют смысла.

Поскольку Stat.h использует тип _dev_t, который определен в Types.h, необходимо включить Types.h перед Stat.h в коде.

_fstat64, которая использует структуру __stat64, позволяющую датам создания файлов выражаться до 23:59: 59 - 31-ое декабря 3000, в формате UTC. В то время как другие функции представляют даты только до 03:14:07 19 января, 2038 В формате UTC. Полночь 1-ого января 1970 года - нижняя граница диапазона дат для всех этих функций.

Изменения этих функций поддерживают 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.

Вариации типов Time и File Length _stat

Функции

Определен ли_USE_32BIT_TIME_T?

Тип Time.

Тип File length

_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> и <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 );
}
  

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Обработка файлов

_access, _waccess

_chmod, _wchmod

_filelength, _filelengthi64

Функции _stat, _wstat