열린 파일에 대한 정보를 가져옵니다.
구문
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_mtime
및 st_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
함수