Manpages

이 름

stat, fstat, lstat − 파 일 상 태 를 얻 는 다

사 용 법

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *file_name, struct stat *buf);
int fstat(int
filedes, struct stat *buf);
int lstat(const char *
file_name, struct stat *buf);

설 명

이 함 수 는 지 정 된 파 일 에 대 한 정 보 를 반 환 한 다 . 이 정 보 를 얻 기 위 해 필 요 한 접 근 권 한 은 없 지 만 , 파 일 을 읽 는 경 로 에 있 는 모 든 디 렉 토 리 에 대 한 탐 색 권 한 이 필 요 하 다 .

statfile_name 으 로 지 정 된 파 일 에 대 해 설 명 하 고 buf 에 채 운 다 . lstatstat 와 동 일 시 된 다 .링 크 는 그 자 체 로 설 명 된 다 , 링 크 에 포 함 되 어 있 는 파 일 을 설 명 하 지 않 는 다 .

fstat 는 stat와 동 일 시 된 다 . file_name. 대 신 에 filedes 에 의 해 지 정 된 열 린 파 일 만 ( open(2) 에 의 해 반 환 되 듯 이 ) 설 명 된 다 .

그 것 들 은 모 두 아 래 영 역 을 포 함 하 는 stat 구 조 을 반 환 한 다 :

struct stat
{
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device type (if inode device) */
off_t st_size; /* total size, in bytes */
unsigned long st_blksize; /* blocksize for filesystem I/O */
unsigned long st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};

The value st_blocks 값 은 512-bytes 블 록 에 있 는 파 일 의 크 기 를 준 다 . st_blksize 값 은 효 율 적 인 파 일 시 스 템 I/O를 위 해 "선 택 된 " 블 록 크 기 를 준 다 . (더 작 은 공 간 에 파 일 을 쓰 는 것 은 쓰 고 -수 정 하 고 -다 시 쓰 는 데 비 효 율 적 이 다 .)4

모 든 리 눅 스 파 일 시 스 템 이 모 든 시 간 영 역 에 서 실 행 하 는 것 은 아 니 다 . 전 통 적 으 로 , st_atimemknod(2), utime(2), read(2), write(2),와 truncate(2). 로 바 뀌 었 다 . 전 통 적 으 로 , st_mtimemknod(2), utime(2),와 write(2). 로 바 뀌 었 다 . st_mtime 는 소 유 자 , 그 룹 , 하 드 링 크 카 운 트 , 혹 은 모 드 의 변 화 에 따 라 바 뀌 지 않 았 다 .

전 통 적 으 로 , st_ctime 는 inode 정 보 를 쓰 거 나 설 정 함 으 로 써 바 뀌 었 다 .(i.e., owner, group,link count, mode,등 등 ).

아 래 POSIX 매 크 로 는 파 일 타 입 을 확 인 하 는 것 이 다 :

S_ISLNK(m)

is it a symbolic link?

S_ISREG(m)

regular file?

S_ISDIR(m)

directory?

S_ISCHR(m)

character device?

S_ISBLK(m)

block device?

S_ISFIFO(m)

fifo?

S_ISSOCK(m)

socket?

아 래 flag는 st_mode 영 역 을 위 해 정 의 된 것 이 다 :

GID 비 트 (S_ISGID)설 정 은 몇 가 지 특 별 한 이 용 법 이 있 다 : 디 렉 토 리 의 경 우 BSD semantic이 쓰 이 고 있 음 이 나 타 난 다 : 생 성 된 파 일 은 생 성 프 로 세 스 와 생 성 된 디 렉 토 리 의 유 효 한 gid로 부 터 가 아 니 라 디 렉 토 리 로 부 터 그 들 의 그 룹 ID를 상 속 받 는 다 . 그 리 고 S_ISGID 비 트 군 을 가 진 다 . 실 행 비 트 (S_IXGRP)군 을 갖 지 않 은 파 일 의 경 우 , mandatory file/record locking을 나 타 낸 다 .

디 렉 토 리 상 의 ’sticky’ bit (S_ISVTX)는 디 렉 토 리 안 의 파 일 이 파 일 의 소 유 자 , 디 렉 토 리 의 소 유 자 , 그 리 고 루 트 에 의 해 이 름 을 바 뀌 거 나 지 워 질 수 있 다 는 것 을 뜻 한 다 .

반 환 값

성 공 시 , 0이 반 환 되 고 , 실 패 시 , −1이 반 환 된 다 . 그 리 고 errno 는 적 절 한 값 으 로 설 정 된 다 .

에 러

EBADF

filedes 는 잘 못 됐 다 .

ENOENT

A component of the path file_name 경 로 의 구 성 요 소 가 존 재 하 지 않 거 나 경 로 가 빈 문 자 열 이 다 .

ENOTDIR

경 로 의 구 성 요 소 가 디 렉 토 리 가 아 니 다 .

ELOOP

심 볼 릭 링 크 가 너 무 많 다 .

EFAULT

잘 못 된 주 소 이 다 .

EACCES

권 한 이 거 부 됐 다 .

ENOMEM

메 모 리 부 족 .

ENAMETOOLONG

파 일 명 이 너 무 길 다 .

호 환

statfstat 호 출 은 SVr4, SVID, POSIX, X/OPEN, BSD 4.3에 따 른 다 . lstat 호 출 은 4.3BSD and SVr4에 따 른 다 . SVr4는 추 가 적 으 로 documents additional fstat 에 러 상 태 인 EINTR, ENOLINK, EOVERFLOW를 문 서 화 했 다 . SVr4 는 추 가 적 으 로 statlstat 의 에 러 인 EACCES, EINTR, EMULTIHOP, ENOLINK, EOVERFLOW를 문 서 화 했 다 . st_blocksst_blksize 필 드 의 사 용 은 이 식 될 수 없 다 . (그 것 들 은 POSIX에 의 해 지 정 된 것 이 아 니 고 BSD에 서 소 개 되 었 다 . 해 석 은 시 스 템 마 다 다 르 고 , 싱 글 시 스 템 에 서 NFS가 마 운 트 되 면 복 잡 해 진 다 .)

POSIX은 S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX 비 트 에 대 해 설 명 하 지 않 지 만 , 대 신 S_ISDIR()등 의 매 크 로 사 용 은 요 구 한 다 . 유 닉 스 V7 (이 나 후 의 시 스 템 )은 POSIX에 서 규 정 한 유 사 어 인 S_IRUSR, S_IWUSR, S_IXUSR 의 S_IREAD, S_IWRITE, S_IEXEC를 갖 는 다 .

타 시 스 템

다 양 한 시 스 템 에 서 사 용 되 는 값 들 :

sticky 명 령 은 AT&T UNIX V32에 서 선 보 였 다 .

관 련 항 목

chmod(2), chown(2), readlink(2), utime(2)