open 시스템 호출


#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>


int open(const char *pathname, int flags, [mode_t mode]);


open 호출이 성공하고 파일이 성공적으로 개방된다면, 양의 정수 값인 파일 기술자(file descriptor)를 반환한다.

만약 오류가 발생한다면, -1을 반환한다. (error checking!)


flags에는 다음과 같은 것들이 있다. (이것들은 fcntl.h에 정의되어있음!)

  • O_RDONLY : 읽기 전용으로 개방할래요.
  • O_WRONLY : 쓰기 전용으로 개방할래요.
  • O_RDWR : 읽기, 쓰기 전용으로 개방할래요.
open 시스템 호출을 이용하여 파일을 생성할 수 있는데, 이 때에는 flags의 결합으로!
  • O_WRONLY | O_CREAT : 개방하려는 pathname이 존재하지 않으면, 쓰기 전용으로 새 파일을 생성하여 개방하라!
여기서 세 번째 인수 mode가 사용되는데, 파일 접근 허가를 나타내는 숫자를 적는다. (추후에 자세히 알아보자)
만약 위의 결합에서 개발하려는 pathname이 존재한다면, O_CREAT와 mode가 없는 것 처럼 단지 쓰기 전용으로 개방된다.

하지만, 파일이 존재한다면 open을 실패하고 싶다면?
이 때에는 다음과 같은 flags를 결합하면 된다.
  • O_WRONLY | O_CREAT | O_EXCL : 개방하려는 pathname이 존재하지 않으면, 쓰기 전용으로 새 파일을 생성하여 개방하지만, 존재한다면 실패하고 -1을 반환하라!

또, 개방하려는 파일이 존재할 때 파일을 개방하는데, 그 안의 내용을 다 지우고 (0바이트로 만들기) 개방하고 싶을 때에는?
  • O_WRONLY | O_CREAT | O_TRUNC : 파일이 존재하고, 접근 허가가 허락할 경우 그 파일을 0바이트로 자르라!
즉, 과거에 수행했던 자료를 모두 지운다.


파일 포인터와 관련해서 다음과 같은 flag도 있다.

  • O_WRONLY | O_APPEND : 파일 포인터가 마지막 바이트 바로 뒤에 위치하도록 쓰기 전용으로 열어라!

보통 open을 하면 파일 포인터가 맨 처음에 위치하게 되지만, 위의 flag를 사용하여 open하면 파일 포인터가 맨 뒤에 위치하게 열린다.

+ Recent posts