stat 함수 예제

다음 예제 조각은 디렉터리에서 각 항목에 대한 상태 정보를 가져옵니다. stat() 함수에 대한 호출은 statbuf가 가리키는 통계 구조에 파일 정보를 저장합니다. stat() 호출 다음에 있는 줄은 프로그램 사용자에게 프레젠테이션을 위해 통계 구조의 필드를 포맷합니다. POSIX 및 기타 유닉스와 같은 운영 체제에서 발견되는 C POSIX 라이브러리 헤더 sys/stat.h는 stat() 함수뿐만 아니라 fstat() 및 lstat()라는 관련 함수를 선언합니다. 함수는 파일 특성을 반환하는 데 사용되는 구조체 통계 버퍼 인수를 사용합니다. 성공시 함수는 0을 반환하고 오류시 -1이 반환되고 errno가 적절하게 설정됩니다. 이러한 함수는 파일에 대한 정보를 반환합니다. 파일 자체에는 권한이 필요하지 않지만 stat() 및 lstat() – 파일로 이어지는 경로의 모든 디렉터리에서 실행(검색) 권한이 필요합니다. st_atime 필드는 execve(2), mknod(2), 파이프(2), utime(2) 및 read(2) (0바이트 이상)와 같은 파일 액세스에 의해 변경됩니다.

mmap(2)과 같은 다른 루틴은 st_atime을 업데이트하거나 업데이트하지 않을 수 있습니다. stat() 함수는 경로로 식별된 파일의 속성을 나열하는 데 사용됩니다. 모든 파일 속성을 읽고 buf 구조로 덤프합니다. 이 함수는 sys/stat.h 헤더 파일에 정의되어 있습니다. st_mtime 필드는 mknod(2), truncate(2), utime(2) 및 쓰기(2) (0바이트 이상)와 같은 파일 수정에 의해 변경됩니다. 또한 디렉터리 st_mtime은 해당 디렉터리에서 파일을 만들거나 삭제하여 변경됩니다. st_mtime 필드는 소유자, 그룹, 하드 링크 수 또는 모드의 변경사항에 대해 변경되지 않습니다. 이전 버전의 POSIX.1 표준에서 시간 관련 필드는 st_atime, st_mtime 및 st_ctime으로 정의되었으며 time_t 형식이었습니다. 이 구조는 더 높은 해상도 시간 단위를 제공하기 때문에 2008 버전의 표준 이후 이러한 필드는 각각 st_atim, st_mtim 및 st_ctim형식의 구조시간 스펙으로 이름이 바뀌었습니다.

호환성을 위해 구현은 구조형 시간 사양의 tv_sec 멤버측면에서 이전 이름을 정의할 수 있습니다. 예를 들어 st_atime은 st_atim.tv_sec.[2] stat() 시스템 호출을 사용하는 코드의 예는 다음과 같습니다. «추가 또는 대체 파일 액세스 제어 메커니즘»을 설명하는 단락의 의도는 파일의 레이블을 지배하지 않는 레이블이 있는 프로세스가 stat() 함수를 수행할 수 없는 안전한 구현을 허용하는 것입니다. 이는 읽기 권한과 관련이 없습니다. 파일 레이블을 지배하는 레이블이 있는 프로세스는 읽기 권한이 필요하지 않습니다. 쓰기 작업을 지원하는 구현은 쓰기에 열려 있는 유효한 파일 설명자가 있더라도 fstat() 함수 호출에 실패할 수 있습니다. stat()는 inode에 대한 파일 속성을 반환하는 유닉스 시스템 호출입니다. 통계()의 의미체계는 운영 체제마다 다릅니다.

예를 들어, Unix 명령 ls는 이 시스템 호출을 사용하여 다음과 같은 파일의 정보를 검색합니다. 대신 utime()을 사용하거나 파일에 액세스하여 발생한 atime에 대한 업데이트 이외의 inode에 대한 다른 변경의 경우 ctime 값이 현재 시간으로 설정됩니다. 성공 시 함수는 0을 반환하고 buf 구조를 파일 속성으로 채웁니다. 오류가 발생하면 함수가 -1을 반환하고 오류 코드를 설정합니다. 이 함수를 사용하여 파일의 다양한 속성을 얻을 수 있습니다. stat() 및 lstat() 함수는 파일 이름 인수를 사용합니다. 파일이 기호 링크인 경우 stat()는 링크의 최종 대상의 속성을 반환하고 lstat()는 링크 자체의 속성을 반환합니다. fstat() 함수는 대신 파일 설명자 인수를 사용 하며 식별 하는 파일의 특성을 반환 합니다.