_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가 가리키는 구조체에 저장합니다. SYS\Stat.h에 정의된 _stat 구조체에는 다음 필드가 포함되어 있습니다.

필드 의미
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 NTFS가 아닌 파일 시스템에서 항상 1입니다.
st_rdev 디바이스인 경우 fd이고, 그렇지 않으면 0입니다.
st_size 파일의 크기(바이트).

fd이(가) 디바이스를 참조할 경우 st_atime, st_ctime, st_mtimest_size 필드는 의미가 없습니다.

Stat.h이(가) Types.h에 정의된 _dev_t 형식을 사용하므로 코드에 Stat.h 전에 Types.h을(를) 포함해야 합니다.

_stat64 구조체를 사용하는 _fstat64는 3000년 12월 31일 23:59:59(UTC)까지 파일 생성 날짜를 표현할 수 있습니다. 반면, 다른 함수는 2038년 1월 18일 23:59:59(UTC)까지의 날짜만 나타냅니다. 이러한 모든 함수에 대한 날짜 범위의 하한은 1970년 1월 1일 자정입니다.

이러한 함수의 변형은 32비트 또는 64비트 시간 형식과 32비트 또는 64비트 파일 길이를 지원합니다. 첫 번째 숫자 접미사(32 또는 64)는 사용된 시간 형식의 크기를 나타내며, 두 번째 접미사( i32 또는 i64)는 파일 크기가 32비트 정수로 표시되는지 아니면 64비트 정수로 표시되는지를 나타냅니다.

_USE_32BIT_TIME_T이(가) 정의되지 않는 한 _fstat과(와) _fstat64i32은(는) 동일하며 _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비트

요구 사항

함수 필수 헤더
_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 함수