파일의 관리

한지용·2021년 4월 6일
0

Operating System

목록 보기
4/7
post-thumbnail

파일의 정보를 관리하는 표준 라이브러리 함수

함수의미
umask파일 생성 마스크를 설정한다
access파일에 대한 사용자의 접급 권한을 확인한다
chmod/fchmod파일에 대한 접근 권한을 변경한다
chown/fchown파일의 소유주와 그룹을 변경한다
link파일의 새로운 이름을 생성한다 (hard - link)
rename파일의 이름이나 위치를 변경한다
symlink파일의 새로운 이름을 생성한다. (soft-link, symbolic link)
readlink심볼형 링크의 파일 이름을 읽어온다
stat/fstat파일의 상태 정보를 가져온다


Hard-link & Soft-link

  • originalname test.txt가 아이노드 블럭을 통해 데이터블록 data를 의미한다고 할때 Hard-link의 경우 data로 연결되는 바로가기를 생성하는 느낌이다.

  • Soft-link의 경우 hard-link와 마찬가지로 바로가기를 생성하는 느낌이지만 soft-link의 데이터블록은 data로 연결되는 것이 아니라 originalname: 파일의 이름으로 연결이 되기 때문에 두 link의 차이점은 파일 삭제시 더 확실하게 알 수 있다.

  • Originalfile test.txt파일을 삭제시 hard-link는 여전히 존재한다. 그러나 soft-link파일은 함께 삭제된다.

umask

파일의 생성시 접근 권한을 제한 하는 명령어로 새로운 파일을 생성할 떄 umask로 등록한 권한은 생성되는 파일에 적용되지 않는다.

  • 파일을 생성하면서 설정한 초기 접근 권한 중에서 umsk로 등록한 값은 제외된다
  • 파일을 생성할 때 허용되지 않은 접근 권한을 실수로 선택하는 것을 방지할 수 있다

accesss

지정한 파일에 대해서 특정 접근 권한을 가지고 있는지를 검사한다
access(const char *pathname, int mode)

  • pathname : 파일의 경로
  • mode : 검사하려는 접근 권한으로 R_OK(읽기 권한), W_OK(쓰기 권한), X_OK(실행 권한), F_OK(파일 존재 여부) 를 사용할 수 있다
  • return : access 호출이 성공하면 0을 반환하고, 실패하면 -1을 반환한다

chmod, fchmod

파일의 접근 권한을 변경한다
chmod(const char *path, mode_t mode)
fchmod(int filedes, mode_t mode)

  • parth 파일에 대한 경로 이름
  • filedes 개방된 파일의 파일 기술자
  • mode 파일에 새롭게 적용하려는 접근 권한
  • return 호출이 성공하면 0을 반환하고, 실패하면 -1을 반환한다.

chmod는 개방하지 않은 파일을 경로명으로 지정한다
fchmod는 개방한 파일을 파일 기술자로 지정한다

키워드를 통해 권한을 지정할 수 있다

여러 권한을 중복하여 설정할 때는 논리 연산자 '|' 를 통해 연결한다

chown, fchown

chown(const char *path, uid_t owner, gid_t group)
fchown(int fd, uid_t owner, gid_t group)

  • parth 파일에 대한 경로 이름
  • fd 개방된 파일의 파일 기술자
  • owner 새로운 소유주의 사용자 식별 번호이다
  • group 새로운 소유주의 그룹 식변 번호이다
  • return 호출이 성공하면 0을 반환하고, 실패하면 -1을 반환한다.

chmod는 개방하지 않은 파일을 경로명으로 지정한다
fchmod는 개방한 파일을 파일 기술자로 지정한다

파일의 소유주를 변경하는 작업은 시스템 관리자만 수행할 수 있다

link(const char oldpath, const char newpath) -hardlink
symlink(const char oldpath, const char newpath) -softlink

  • oldpath: 원본 파일의 경로이름
  • newpath: 하드링크/소프트링크의 경로 이름
  • return: 호출이 성공하면 0을 반환하고, 실패하면 -1을 반환한다

readlink(const char path, char buf, size_t bufsize)
소프트 링크 파일의 실제 내용을 읽는다
소프트 링크는 원본 파일의 경로 이름을 저장하고 있고, readlink는 이 경로 이름을 읽어온다.

  • path : 소프트 링크에 대한 경로 이름
  • buf : 소프트 링크의 실제 내용을 담을 공간이다
  • bufsize: buf의 크기이다
  • return : 읽기가 성공하면 buf에 저장한 바이트 수를 반환하며 실패할 경우 -1을 반환한다.

rename

rename(const char oldpath, const char newpath)

  • oldpath: 이름을 바꾸려는 파일의 경로이름
  • newpath: 파일의 새로운 이름
  • return: 호출이 성공하면 0을 반환하고, 실패하면 -1을 반환한다

oldpath와 newpath가 동일하게 지정될 경우 성공으로 간주한다.
newpath로 지정한 파일이 이미 존재할 경우 이를 삭제한 후에 이름을 변경한다.
newpath로 지정한 파일이 이미 존재하며 만약 이 파일이 디렉터리라면 디렉터리가 비어있으면 호출이 성공하고 비어있지 않으면 실패한다.

stat,fstat

stat(const char filename, struct stat buf)
fstat(int filedes, struct stat *buf)

  • filename : 파일의 경로 이름이다
  • filedes : 개방된 파일의 파일 기술자이다
  • buf: 파일의 정보를 담기 위한 struct stat 타입 구조체의 포인터이다
  • return : 호출이 성공하면 0을 반환하고 실패하면 -1을 반환한다.

지정한 파일의 아이노드 블록에 저장된 정보를 읽어온다.

리눅스
파일 데렉토리 생성: mkdir dir_path
현재 디렉토리 변경: cd dir_path
파일 디렉토리 옮기기: mv file_path new_file_path
파일 여러개 한꺼번에 옮기기: mv ex04* new_file_path (: ex04로 시작하는 모든 파일을 옮긴다)
파일 복사하기: cp original_file_path copy_path

0개의 댓글