본문 바로가기
UNIX 프로그래밍

[3주차 개념] UNIX 파일과 디렉토리

by 서영선 2023. 9. 27.

🚩 파일 정보의 획득 : 파일 관련 각종 정보를 알아볼 수 있는 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이 이미 존재 시)

 

 

 

 

 

 

 

Lect3 (9).pdf
0.56MB

 

 

댓글