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하면 파일 포인터가 맨 뒤에 위치하게 열린다.
'개발 > System' 카테고리의 다른 글
UNIX 파일 접근 프리미티브 : 파일 제거 (0) | 2012.10.28 |
---|---|
UNIX 파일 접근 프리미티브 : lseek 시스템 호출 (0) | 2012.10.28 |
UNIX 파일 접근 프리미티브 : write 시스템 호출 (0) | 2012.10.28 |
UNIX 파일 접근 프리미티브 : read 시스템 호출 (0) | 2012.10.28 |
UNIX 파일 접근 프리미티브 : close 시스템 호출 (0) | 2012.10.28 |