파일과 디렉토리

hgh1472·2023년 12월 23일
0

파일 정보의 획득

파일 관련 각종 정보를 알아볼 수 있는 system call

사용법

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf)
int fstat(int filedes, struct stat *buf)

fstat은 open된 file에 대한 정보를 획득한다.
buf엔 file 정보가 저장된다.

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

  • 04000 S_ISUID : 실행이 시작되면, 소유자의 uid가 euid가 된다.
  • 02000 S_ISGID : 실행이 시작되면, 소유자의 gid가 egid가 된다.

소유권자는 파일을 생성한 사람이다. user-id인 uid로 구분한다.
사용자는 파일을 사용하는 사람이다. effective user-id인 euid로 구분한다.

access 시스템 호출

특정 file에 대한 읽기/쓰기/실행이 가능한지 확인하는 system call

사용법

#include <unistd.h>
int access(const char *pathname, int amode)
  • amode : R_OK, W_OK, X_OK, F_OK
  • return 값 : 0 or -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

한 파일에 하나 이상의 이름 : 각 이름을 "hard link"라 부른다.
link count : link의 수

사용법

#include <unistd.h>
int link(const char *original_path, const char *new_path)

return 값 : 0 or -1(new_path가 이미 존재하면)

symbolic link

link의 제한점으로, directory에 대한 link 생성은 불가능하다. 또한 다른 file system에 있는 file에 대해서는 link 생성이 불가능하다. 따라서 symbolic link를 이용한다.

사용법

#include <unistd.h>
int symlink(const char *realname, const char *symname)
  • return 값 : 0 or -1(symname이 이미 존재하면)

open system call에 의해 open이 가능하다. 단지, realname 파일이 open된다. 따라서 symname안에 있는 내용을 보고 싶다면, readlink를 사용한다.

symbolic link가 가리키는 파일이 아닌 symbolic link 자체의 파일 정보를 받고 싶다면, lstat을 사용한다.

directory 생성 및 제거

directory 생성

directory file에 .과 ..을 넣어서 생성

#include <sys/types.h>
#Include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode)

directory 제거

directory가 비어 있을 경우에만 성공

#include <unistd.h>
int rmdir(const char *pathname)

rename 시스템 호출

사용법

#include <stdio.h>
int rename(const char *oldpathname, const char *newpathname)

file과 directory 둘 다 rename 가능하다.
newpathname이 존재해도 -1이 아니다. 기존 file을 제거하고 새 이름을 부여한다.

getcwd 시스템 호출

사용법

#include <unistd.h>
char *getcwd(char *name, size_t size)
  • return 값 : current working directory의 경로 이름
  • size는 실제 길이보다 +1이 커야 한다.
  • 성공 시 directory의 경로 이름이 name에 copy 실패 시 null pointer return.

chdir 시스템 호출

사용법

#include <unistd.h>
int chdir(const char *path)

directory 열기 및 닫기

directory 열기

#include <sys/types.h>
#Include <dirent.h>
DIR *opendir(const char *dirname)

DIR형의 data structure에 대한 pointer를 return. 실패 시 null pointer return.

#include <dirent.h>
int closedir(DIR *dirptr)

directory 읽기

사용법

#include <sys/types.h>
#Include <dirent.h>
struct dirent *readdir(DIR *dirptr)
  • return 값 : dirptr이 가리키는 DIR 구조내의 한 항.
  • pointer dirptr은 read 후 다음 항을 가리킨다.
  • directory의 끝에 도달하면, null pointer return.

directory file pointer 이동

사용법

#include <sys/types.h>
#Include <dirent.h>
void rewinddir(DIR *dirptr)

0개의 댓글