Compartilhar via


_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32

Obtém informações sobre um arquivo aberto.

Sintaxe

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
);

Parâmetros

fd
Descritor de arquivo do arquivo aberto.

buffer
Ponteiro para a estrutura para armazenar resultados.

Valor retornado

Retornará 0 se as informações de status do arquivo forem obtidas. Um valor retornado de -1 indica que há um erro. Se o descritor do arquivo for inválido ou buffer for NULL, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução puder continuar, errno será definido como EBADF no caso de um descritor de arquivo inválido, ou como EINVAL se buffer for NULL.

Comentários

A função _fstat obtém informações sobre o arquivo aberto associado ao fd e as armazena na estrutura apontada por buffer. A estrutura _stat, definida em SYS\Stat.h, contém os campos a seguir.

Campo Significado
st_atime Hora do último acesso ao arquivo.
st_ctime Hora da criação do arquivo.
st_dev Se for um dispositivo, fd; caso contrário, 0.
st_mode Máscara de bits para informações sobre o modo de arquivo. O bit _S_IFCHR será definido se fd se referir a um dispositivo. O bit _S_IFREG será definido se fd se referir a um arquivo comum. Os bits de leitura/gravação são definidos de acordo com o modo de permissão do arquivo. _S_IFCHR e outras constantes são definidas no SYS\Stat.h.
st_mtime Hora da última modificação do arquivo.
st_nlink Sempre 1 em sistemas de arquivos diferentes de NTFS.
st_rdev Se for um dispositivo, fd; caso contrário, 0.
st_size Tamanho do arquivo em bytes.

Se fd se referir a um dispositivo, os campos st_atime, st_ctime, st_mtime e st_size não serão significativos.

Como Stat.h usa o tipo _dev_t que é definido em Types.h, você precisa incluir Types.h antes de Stat.h no código.

_fstat64, que usa a estrutura _stat64, permite que as datas de criação de arquivos sejam expressas até 23:59:59 de 31 de dezembro de 3000, no UTC, enquanto as outras funções representam apenas datas até 23:59:59 de 18 de janeiro de 2038, no UTC. Meia-noite de 1º de janeiro de 1970 é o limite inferior do intervalo de datas para todas essas funções.

Variações dessas funções dão suporte a tipos de hora de 32 ou de 64 bits e a comprimentos de arquivo de 32 ou de 64 bits. O primeiro sufixo numérico (32 ou 64) indica o tamanho do tipo de hora usado; o segundo sufixo é i32 ou i64, que indica se o tamanho do arquivo é representado como um inteiro de 32 ou de 64 bits.

A menos que _USE_32BIT_TIME_T seja definido, _fstat é equivalente a _fstat64i32 e _stat contém uma hora de 64 bits. Quando _USE_32BIT_TIME_T é definido, _fstat usa uma hora de 32 bits e _stat contém uma hora de 32 bits. O mesmo vale para _fstati64.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Variações de tipo de hora e de tipo de tamanho de arquivo de _stat

Funções _USE_32BIT_TIME_T definido? Tipo de hora Tipo de tamanho de arquivo
_fstat Não definido 64 bits 32 bits
_fstat Definido 32 bits 32 bits
_fstat32 Não afetado pela definição de macro 32 bits 32 bits
_fstat64 Não afetado pela definição de macro 64 bits 64 bits
_fstati64 Não definido 64 bits 64 bits
_fstati64 Definido 32 bits 64 bits
_fstat32i64 Não afetado pela definição de macro 32 bits 64 bits
_fstat64i32 Não afetado pela definição de macro 64 bits 32 bits

Requisitos

Função Cabeçalho necessário
_fstat <sys/stat.h> e <sys/types.h>
_fstat32 <sys/stat.h> e <sys/types.h>
_fstat64 <sys/stat.h> e <sys/types.h>
_fstati64 <sys/stat.h> e <sys/types.h>
_fstat32i64 <sys/stat.h> e <sys/types.h>
_fstat64i32 <sys/stat.h> e <sys/types.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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

Confira também

Manipulação de arquivos
_access, _waccess
_chmod, _wchmod
_filelength, _filelengthi64
_stat, _wstat funções