Rechercher une page de manuel
open
Langue: ko
Version: June 3, 1999 (fedora - 25/11/07)
Section: 2 (Appels système)
이름
open, creat - 파일이나 장치를 열고 생성한다.사용법
#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);
설명
open() 시스템 호출은 파일 디스크립터에서 경로명 전환에 사용된다. 호출이 성공하면, 반환되는 파일 디스크립터는 프로세스를 위해 열리지 않는다. 이 호출은 모든 다른 프로세스가 공유하지 않는 새로운 파일을 생성한다. flags 는 파일을 read-only, write-only, read/write로 여는 요청을 하는 O_RDONLY, O_WRONLY or O_RDWR 중 하나이다. flags 는 또한 다음중 하나이상을 가진 bitwise-or'd 일런지 모른다:- O_CREAT
- 파일이 없으면 생성될것이다.
- O_EXCL
- When used with O_CREAT 를 사용할 때, 파일이 이미 존재한다면 에러나 파일을 여는데 실패할 것이다. O_EXCL 는 NFS 파일 시스템을 깬다. 잠금파일을 사용하는 automic파일 잠금을 실행하기위한 솔루션은 같은 파일 시스템에 특정파일을 생성하기 위함이다.
- O_NOCTTY
- 경로명 이 터미널 장치를 언급한다면 tty(4) 를 본다.
- O_TRUNC
- 파일이 이미 존재한다면 그것은 생략될 것이다.
- O_APPEND
- 파일이 추가모드에 열려있다. 각각 기록 되기 전에 파일포인터는 lseek 가 있는 것처럼 파일의 끝에 위치한다. O_APPEND 는 적어도 하나 이상의 프로세스가 파일에 데이타를 추가한다면 NFS파일 시스템상에 변질(correpted)된 파일을 이끈다. 이것은 NFS가 파일에 추가를 지원하지 않기때문이다. 그래서 클라이언트 커널은 그것을 시뮬레이트한다.
- O_NONBLOCK or O_NDELAY
- 파일은 비블록 모드로 열린다.
- O_SYNC
- 파일은 입출력 동기화를 위해 열린다. 파일 디스크립터 결과 모든 writes 는 데이타가 물리적으로 하드웨어로 기록될 때까지 호출 프로세스를 블록화 할 것이다. 아래의 RESTRICTIONS를 본다.
- O_NOFOLLOW
- 경로명이 심볼릭 링크라면, 파일열기는 실패한다. 이것은 리눅스 버전 2.1.126에 추가된 freeBSD확장이다. 경로명의 초기 구성인 심볼릭 링크는 계속 따를것이다. glibc2.0.100의 헤더와 후에 이 플래그의 정의를 포함한다; 커널 2.1.126이전에서 사용한다면 무시할 것이다.
- O_DIRECTORY
- 경로명이 디렉토리가 아니라면, 파일열기는 실패할 것이다. 이 플래그는 리눅스의 특징이고, opendir(3)가 FIFO나 테입장치에 호출된다면 서비스의 거부문제를 피하기 위해 리눅스 커널 버전 2.1.126에 추가되었다. 그러나 opendir는 외부에서 사용될 수 없다.
- O_LARGEFILE
- 대용량 파일 시스템을 지원하는 32비트 시스템은 31비트로는 열수 없는 크기의 파일을 사용할 수 있다. 리눅스 커널은 이것을 아직은 지원하지 못하지만, glibc 2.1에서 테스팅되었다.
몇몇 이러한 옵션 플래그는 파일이 열린후 사용하는 fcntl 가 바뀔 수 있다. 모드 는 새로운 파일이 생성되면 사용권한을 지정한다. 대개 프로세스의 umask 로 수정한다: 생성된 파일의 권한은 (mode & ~umask) 이다.
다음의 심볼릭 상수는 모드 를 위해 제공된다:
- S_IRWXU
- 00700 사용자(파일 소유자)는 읽기, 쓰기, 실행권한이 있다.
- S_IRUSR (S_IREAD)
- 00400 사용자는 읽기 권한이 있다.
- S_IWUSR (S_IWRITE)
- 00200 사용자는 쓰기 권한이 있다.
- S_IXUSR (S_IEXEC)
- 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 기타사용자는 실행 권한이 있다. 모드 는 항상 O_CREAT 가 플래그 일때 지정되어야만하고, 그밖에는 무시한다. 생성 은 O_CREAT|O_WRONLY|O_TRUNC 와 일치하는 플래그 를 가진 파일열기 와 일치한다.
반환값
열기와생성 은 에러가 나면 새로운 파일 디스크립터를 반환하거나 -1을 반환한다. 이런경우 errno 는 적절히 설정된다. Note that 열기 는 장치파일을 열순 있지만, 생성 은 장치파일을 생성 할 수 없는 것을 주지한다. 대신 mknod(2) 을 사용한다.UID 맵핑이 가능한 NFS 파일 시스템에서 열기는 파일 디스크립터를 반환하지만, read(2)는 거부된다. 이것은 클라이언트가 권한검사에 의해 열기를 실행하지만 UID 맵핑은 서버에 의해 실행할 수 있기 때문이다.
에러
- EEXIST
- 경로명 이 이미 존재하고, O_CREAT and O_EXCL 가 사용된다.
- EISDIR
- 경로명 이 디렉토리를 참조하고, 접근은 복잡한 기록을 요구했다.
- EACCES
- 요청한 파일 접근은 거부되거나 경로명 의 디렉토리중 하나가 실행권한을 찾을 수 없거나 파일이 아직 존재하지 않고 부모디렉토리 접근이 거 부됐다.
- ENAMETOOLONG
- 경로명이너무길다.
- ENOENT
- A directory component in 경로명 의 디렉토리가 없거나 심볼릭 링크가 깨졌다.
- ENOTDIR
- A component used as a directory in 경로명 에 디렉토리로써 사용되는 것이 없다. 사실 디렉토리나 O_DIRECTORY가 지정되었고 경로명 이 디렉토리가 아니다.
- ENXIO
- O_NONBLOCK | O_WRONLY가 설정되고, 지정한 파일이 FIFO이고 어떠한 프로세스도 읽기위해 열린 파일이 없다. 또는, 파일이 장치파일이고 일치하는 장치가 없다.
- ENODEV
- 경로명 이 장치파일을 참조하고, 일치하는 장치가 없다.
- EROFS
- 경로명 이 read-only 파일시스템의 파일을 참조하고 쓰기접근이 요청됐다.
- ETXTBSY
- 경로명 이 현재 실행중인 실행이미지파일을 참조하고 쓰기권한 접근이 요청되었다.
- EFAULT
- 경로명이당신이접근할수있는주소공간밖을가리킨다.
- ELOOP
- 심볼릭링크가 너무 많다. 경로명 이나 O_NOFOLLOW가 지정되었지만 경로명 이 심볼릭 링크이다.
- ENOSPC
- 경로명 이 생성되었지만 장치가 경로명 이 포함하는 장치가 새로운 파일을 위한 공간이 없다.
- ENOMEM
- 커널 메모리가 부족하다.
- EMFILE
- 프로세스가 이미 파일열기의 최대값에 찼다.
- ENFILE
- 파일열기의 총합제한에 도달했다.
호환
SVr4, SVID, POSIX, X/OPEN, BSD 4.3제한
POSIX은 O_SYNC, O_DSYNC 와 O_RSYNC에 일치하는 입출력 동기화의 세가지 다른 변수를 제공한다. 현재(2.1.130) 이런것들은 리눅스에서 모두 같은 뜻이다.관련 항목
read(2), write(2), fcntl(2), close(2), link(2), mknod(2), mount(2), stat(2), umask(2), unlink(2), socket(2), fopen(3), fifo(4)역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 29Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre