open
OS/리눅스 & 유닉스 2011. 12. 23. 13:191장. open(2)
파일이나 장치를 열고 생성한다.
1.1절. 사용법
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode); |
1.2절. 설명
open(2) 은 시스템호출로, 파일을 열거나 생성 할때 사용한다. 성공하면 해당파일을 지시하는 int 형의 파일지시자를 되돌려준다. path_name 은 생성하고자 하는 파일이름을 나타낸다. 보통 full path 이름을 적어주며, 단지 파일이름만 적을경우에는 현재 경로에 파일이 생성된다.
flag 는 파일을 어떠한 mode 로 열것인지를 결정하기 위해서 사용한다. "읽기전용", "쓰기전용", "읽기/쓰기" 모드로 열수 있다. 이들 모드 선택을 위해서 O_RDONLY, O_WRONLY, O_RDWR 이 존재 한다.
또한 다음중 하나이상의 mode 를 bitwise 연산시킬수도 있다.
- O_CREAT
만약 pathname 파일이 존재하지 않을경우 파일을 생성한다.
- O_EXCL
O_CREAT 를 이용해서 파일을 생성하고자 할때, 이미 파일이 존재한다면, 에러를 되돌려주며 파일을 생성하는데 실패한다. 이러한 특성때문에 때때로 잠금 파일을 만들기 위해 사용되기도 한다.
- O_APPEND
파일이 추가모드로 열린다. 파일의 위치는 파일의 끝이된다.
- O_NONBOLOCK, O_NDELAY
파일이 비봉쇄 모드로 열린다.
- O_NOFOLLOW
경로명이 심볼릭 링크라면, 파일열기에 실패한다.
- O_DIRECTORY
경로명이 디렉토리가 아니라면 파일열기에 실패한다.
- O_SYNC
입출력 동기화 모드로 열린다. 모든 write 는 데이타가 물리적인 하드웨어에 기록될때까지 호출 프로세스를 블록시킨다.
또한 mode 를 이용해서 에 파일의 권한을 지정해 줄수도 있다.
- S_IRWXU
00700 모드로 파일 소유자에게 읽기, 쓰기, 쓰기 실행권한을 준다.
- S_IRUSR
00400 으로 사용자에게 읽기 권한을 준다.
- S_IWUSR
00200 으로 사용자에게 쓰기 권한을 준다.
- S_IXUSR
00100 으로 사용자에게 실행 권한을 준다.
- S_IRWXG
00070 으로 그룹에게 읽기, 쓰기, 실행 권한을 준다.
- S_IRGRP
00040 으로 그룹에게 읽기권한을 준다.
- S_IWGRP
00020 으로 그룹에게 쓰기권한을 준다.
- S_IXGRP
00010 으로 그룹에게 실행권한을 준다.
- S_IRWXO
00007 으로 기타 사용자 에게 읽기, 쓰기, 실행 권한을 준다.
- S_IROTH
00004 으로 기타 사용자 에게 읽기 권한을 준다.
- S_IWOTH
00002 으로 기타 사용자 에게 쓰기 권한을 준다.
- S_IXOTH
00001 으로 기타 사용자 에게 실행 권한을 준다.
1.4절. 에러
- EEXIST
O_CREAT 와 O_EXECL 이 같이 사용되었을경우 발생한다. 이미 경로파일이 존재할경우 발생된다.
- EACCES
파일 접근이 거부될경우이다. 주로 권한 문제 때문에 발생한다.
- ENOENT
경로명의 디렉토리가 없거나, 심볼릭 링크가 깨져있을때.
- ENOENT
경로명의 디렉토리가 없거나, 심볼릭 링크가 깨져있을때.
- ENODEV
경로명이 장치파일을 참고하고, 일치하는 장치가 없을때.
- EROFS
경로명이 read-only 파일시스템을 참조하면서, 쓰기로 열려고 할때.
- EROFS
경로명이 read-only 파일시스템을 참조하면서, 쓰기로 열려고 할때.
- EFAULT
경로명이 접근할수 없는 주소강간을 가르킬때
- ELOOP
심볼릭 링크가 너무 많을때.
'OS > 리눅스 & 유닉스' 카테고리의 다른 글
write (0) | 2011.12.23 |
---|---|
read (0) | 2011.12.23 |
fcntl 을 이용한 파일제어 (0) | 2011.12.23 |
mktime 날짜를 Unix Time으로 전환 (0) | 2011.12.08 |
unix/linux ftp 명령어 (0) | 2011.12.05 |