#include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
int stat(const char *pathname, struct stat *buf); int fstat(int *fd, struct stat *buf); int lstat(const char *pathname, struct stat *buf);
return: 성공 0, 실패 -1(errno 설정) |
ㆍstat - pathname으로 주어진 경로이름에 해당하는 파일에 대한 정보를 둘째 인수인 buf 구조체를 통해 얻는다.
ㆍfstat - 파일 디스크립터 filedes에 대해 이미 열려 있는 파일에 대한 정보를 조회한다.
ㆍlstat – 지정된 파일이 심볼릭 링크(Symbolic link)이면 그 링크가 가리키는 파일이 아니라
그 링크 자체에 대한 정보를 돌려준다.
struct stat 구조체: <sys/stat.h> |
|
struct stat { mode_t st_mode; ino_t st_ino; dev_t st_dev; dev_t st_rdev; nlink_t st_nlink; uid_t st_uid; gid_t st_gid; off_t st_size; blksize_t st_blksize; blkcnt_t st_blocks; time_t st_atime; time_t st_mtime; time_t st_ctime; }; |
/* 파일 종류 및 모드(접근 권한) */ /* i노드 번호(일련 번호) */ /* 장치 번호(파일 시스템) */ /* 특수 파일들에 대한 장치 번호 */ /* 링크 개수 */ /* 소유자의 사용자 ID */ /* 소유자의 그룹 ID */ /* 바이트 단위 크기(정규 파일의 경우) */ /* 최적의 I/O 블록 크기 */ /* 할당된 디스크 블록 개수 */ /* 마지막으로 접근된 시간 */ /* 마지막으로 수정된 시간 */ /* 파일 상태가 마지막으로 변경된 시간 */ |
[ stat.h에 정의되어 있는 mode_t에 대한 플래그들 ]
mode |
Octal |
Description |
파일 형식 비트 필드 |
||
S_IFMT |
00170000 |
bit mask for the file type bit fields |
S_IFSOCK |
0140000 |
Socket |
S_IFLNK |
0120000 |
Symbolic link |
S_IFREG |
0100000 |
Regular file |
S_IFBLK |
0060000 |
Block device |
S_IFDIR |
0040000 |
Directory |
S_IFCHR |
0020000 |
Character device |
S_IFIFO |
0010000 |
pipe or FIFO |
파일 접근 권한 비트 필드 |
||
S_ISUID |
0004000 |
실행에 대한 SUID(set-user-ID) |
S_ISGID |
0002000 |
실행에 대한 SGID(set-group-ID) |
S_ISVTX |
0001000 |
저장된 텍스트(saved-text, (sticky bit)) |
S_IRWXU |
00700 |
파일 소유자 권한 마스크 |
S_IRUSR |
00400 |
read by user (owner) |
S_IWUSR |
00200 |
write by user (owner) |
S_IXUSR |
00100 |
execute by user (owner) |
S_IRWXG |
00070 |
그룹 권한 마스크 |
S_IRGRP |
00040 |
read by group |
S_IWGRP |
00020 |
write by group |
S_IXGRP |
00010 |
execute by group |
S_IRWXO |
00007 |
Other에 대한 권한 마스크 |
S_IROTH |
00004 |
read by other (world) |
S_IWOTH |
00002 |
write by other (world) |
S_IXOTH |
00001 |
execute by other (world) |
@st_mode와 S_IFMT의 비트 AND 연산
위의 비트 AND 연산 결과를 16진수로 표현하면 0X8000, 8진수로0100000이 되는데,
이는 위의 표에서 S_IFREG와 같으므로 정규 파일(Regular file)을 의미 한다.
if ((st.st_mode & S_IFMT) == S_IFREG)로 표현.
[ 파일 형식을 좀더 쉽게 알아내는 POSIX 매크로]
Macro |
Type of file |
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) |
regular file |
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) |
directory file |
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) |
character special file |
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) |
block special file |
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) |
pipe or FIFO |
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) |
symbolic link |
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) |
socket |
IPC 객체 종류 Macro |
Type of object |
S_TYPEISMQ(buf) |
message queue |
S_TYPEISSEM(buf) |
semaphore |
S_TYPEISSHM(buf) |
shared memory object |
@ m = mode_t, buf = struct stat 구조체 포인터
'Linux > Programming' 카테고리의 다른 글
한계들(Limits) – limits.h 와 conf 함수들 (0) | 2011.10.23 |
---|---|
파일 접근 시간과 수정 시간을 변경 - utime(2) (0) | 2011.10.23 |
파일 시간들(File Times) - 수정, 변경, 접근 시간 (0) | 2011.10.23 |
파일 접근 권한 비트 요약 (0) | 2011.10.23 |
리눅스 개발환경의 개요도 (0) | 2011.10.15 |