UNIX I/O Open,Close

난1렙이요·2024년 10월 20일

시스템 프로그래밍

목록 보기
12/22

Open

  • Unix는 open함수를 통해서 파일을 열 수 있다.
#include <fcntl.h>
#include <sys/stat.h>
int open(const char *path, int flag);
int open(const char *path, int flag, mode_t mode);
  • path : 오픈하고자 하는 파일의 경로를 받는다.
  • flag : 파일을 오픈할 때 모드를 설정한다. 읽기 전용 모드, 쓰기 전용 모드, 둘 다 가능한 모드 3가지가 있다.
  • mode_t : 처음 파일을 만들 때 파일의 엑세스 권한에 대한 정보가 필요하다. 이를 permission information이라고 한다. 위 두 함수 중 아래는 새로운 파일을 만드는 함수인데, 파일을 만들 때 엑세스 권한을 설정한다.

Return value

  • 만약 성공적으로 수행되면 file descriptor 값을 반환한다.
  • 에러가 나면 -1을 return한다.

Flag

flag는 파일을 오픈하고자 할 때 용도에 맞게 모드를 설정하는 데 사용한다. 모드는 다음과 같다.

  • O_RDONLY : 읽기 전용(read only)
  • O_WRONLY : 쓰기 전용(write only)
  • O_RDWR : 둘 다 가능(read and write)

추가적으로 OR(|) 연산과 같이 아래 설정들을 추가할 수 있다.

  • O_APPEND : 파일이 열리면 file offset은 시작 지점을 가리킨다. 이 설정을 사용하면 write함수를 사용하면 file offset이 맨 뒤로 이동하며, 그 뒤 write를 수행한다. 다시 말해 기존 파일에 덧붙히는 기능을 한다.
  • O_TRUNC : write를 수행하면서 내용이 있는 파일을 열 때 파일 안의 내용을 모두 지운다.
  • O_CREAT : 해당 경로에 있는 파일이 존재하지 않으면 새로 만든다. 이미 존재하면 무시한다.
  • O_EXCL : O_CREAT와 같이 사용한다. 만약 파일이 존재하면 에러 메세지를 반환한다.
  • O_NOCTTY : 터미널 파일을 열 때 사용한다.

Permission mask

파일을 만들 때는 permission(접근 권한)이 필요하다. 모든 파일은 3개의 사용자에 대한 접근 권한이 필요하다. user, group, everybody 각각에 대한 접근 권한을 지정해야 하며, read(w), write(w), execute(x) 3개의 실행에 대한 권한을 지정한다.

  • 권한 정보 하나는 bit값 하나를 나타낸다.
  • 그러므로 3개의 사용자 각각에 3개의 권한이 있으므로 총 9개의 bit가 필요하다.
  • 하나의 사용자에 대해 3-bit가 부여되므로 23=82^3 = 8개의 가지수가 있다.
  • 그러므로 8진수를 사용해 user부터 권한을 나타낼 수 있다.
  • UNIX에서 많이 사용되는 파일 권한으로 644가 있다. 이는 user에게 읽기와 쓰기, 나머지에겐 읽기만 권한을 부여하는 것으로 대부분의 파일들이 이러한 권한을 가지는 경우가 많다.

Symbolic name으로 지정할수도 있다. 앞의 경우 처럼 OR(|)를 통해 지정할 순 있지만 잘 쓰이진 않는다.


Close

  • 파일을 Open하고 해야할 일을 모두 수행하면 Close를 수행해야 한다.
  • 만약 Close를 하지 않으면 Open한 데이터가 남아있게 되므로 문제가 생길 수 있다.
#include <unistd.h>
int close(int filedes);
  • int filedes : file descriptor를 통해 열려있는 파일을 닫을 수 있다.

Return value

  • 만약 성공적으로 수행되면 file descriptor 값을 반환한다.
  • 에러가 나면 -1을 return한다.
profile
다크 모드의 노예

0개의 댓글