🚩 파일 정보의 획득 : 파일 관련 각종 정보를 알아볼 수 있는 system call
#include <fnctl.h>
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char * pathname, struct stat * buf);
int fstat(int filedes, struct stat * buf);
- stat 은 file 을 안열고 정보를 획득하지만, fstat 은 file 을 열고 정보 획득
- buf 에는 file 정보가 저장
✔ buf 에 채워지는 내용의 종류
- st_dev, st_ino : identifier (논리적 장치 번호와 inode 번호)
- st_mode : permission mode
- st_nlink : link의 수
- st_uid, st_gid : user의 uid와 gid
- st_rdev : file이 장치인 경우만 사용
- st_size : 논리적 크기
- st_atime, st_mtime, st_ctime : file의 최근 access time, update time, stat 구조의 update time
- st_blksize : I/O block 크기
- st_blocks : 파일에 할당된 block의 수
📌 access permission
▶ file mode : 0764 = 0400 + 0200 + 0100 + 0040 + 0020 + 0004
▷ owner : group : others
▷ read(4) + write(2) + execution(1)
▶ 상징형 모드 : 0764 = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IROTH
▶ permission 확인
if (s.st_mode & S_IRUSR)
printf("소유자 읽기 권한 설정");
if (S_ISREG(s.st_mode))
printf("일반 파일")
if (S_ISDIR(s.st_mode))
printf("디렉토리 파일")
▶ 그 밖의 permission
- 04000 S_ISUID : 실행이 시작되면, 소유자의 uid가 euid가 된다.
- 02000 S_ISGID : 실행이 시작되면, 소유자의 gid가 egid가 된다.
소유권자 : 파일을 생성한 사람, uid, gid로 구분
사용자 : 파일을 사용하는 사람, euid, egid로 구분
📌 access 시스템 호출 : 특정 파일에 대한 읽기/ 쓰기/ 실행이 가능한지 확인하는 system call
#include <unistd.h>
int access(const char * pathname, int amode);
- amode : R_OK, W_OK, X_OK, F_OK
- return 값 : 0 또는 -1
- euid가 아니라 uid에 근거하여 process가 file에 접근 가능한지를 표현
📌 chmod 시스템 호출 : 특정 파일의 access permission을 변경하는 system call
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char * pathname, mode_t mode);
int fchmod(int fd, mode_t mode);
소유자만 사용가능하다!
📌 link 시스템 호출 : 기존 파일에 새로운 이름을 부여하는 system call
- link count : link 의 수
#include <unistd.h>
int link(const char * original_path, const char * new_path);
- return 값 : 0 또는 -1 (new_path 가 이미 존재하면)
↔ unlink("a.out");
: link 제거, link_count가 0이 되면 실제로 제거
📌 symbolic link
- link 의 제한점 : directory 에 대한 link 생성이 불가하고, 다른 file system에 있는 file에 대해서는 link 생성이 불가하다.
→ symbolic link (자체가 file이고, 그 안에 다른 file에 대한 경로를 수록)
#include <unistd.h>
int symlink(const char *realname, const char *symname);
- return 값 : 0 또는 -1 (symname이 이미 존재 시)
'UNIX 프로그래밍' 카테고리의 다른 글
[1주차 실습] UNIX 실습 문제 (0) | 2023.10.15 |
---|---|
[6주차 개념] UNIX 프로세스 생성과 실행 (1) | 2023.10.13 |
[4주차, 5주차 개념] UNIX 시스템 정보/ 프로세스 정보 (0) | 2023.10.13 |
[2주차 개념] UNIX 파일 입출력 (0) | 2023.09.27 |
[1주차 개념] UNIX 사용법 (+ LINUX와 차이점) (0) | 2023.09.07 |
댓글