tail head cat sleep
QR code linking to this page

Man page  — OPEN

명칭

open – 읽기 또는 기록용으로 파일을 오픈한다, 또는 작성한다

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <fcntl.h>

int
open(const char *path, int flags, ...);

해설

path 에 의해 지정되는 파일을, 인수 flags 에 의해 지정된 것처럼 읽기 또는 기록 (또는 그 양쪽 모두)용으로 오픈해, 그 파일 기술자를 호출해 원프로세스에 돌려줍니다. 파일이 존재하지 않는 경우에는 파일을 작성하도록(듯이), flags 인수로 지시할 수 있습니다 ( O_CREAT 플래그를 지정한다). 이 경우, open 에는 3 번째의 인수 mode_t mode 하지만 필요하고, 파일은 chmod(2) 그리고 설명되고 있도록(듯이) 모드 mode 그리고 작성되어 프로세스의 umask 치에 의해 수정됩니다 (umask(2) (을)를 참조).

지정된 플래그는 다음의 값의 논리합 ( or) 그리고 작성됩니다.

O_RDONLY        읽기 전용으로 오픈
O_WRONLY        기록 전용으로 오픈
O_RDWR          읽기와 기록용으로 오픈
O_NONBLOCK      오픈할 경우에 블록 하지 않는다
O_APPEND        기록마다 말미에 추가한다
O_CREAT         파일이 존재하지 않는 경우, 작성한다
O_TRUNC         사이즈를 0 에 잘라 버린다
O_EXCL          작성하는 파일이 이미 존재했을 경우, 에러로 한다
O_SHLOCK        공유 락을 자동적으로 취득한다
O_EXLOCK        배타적 락을 자동적으로 취득한다
O_DIRECT        캐쉬의 효과를 잃는 또는 줄인다
O_FSYNC         동기적으로 기입한다
O_NOFOLLOW      기호 연결을 더듬지 않는다

O_APPEND (을)를 설정해 파일을 오픈하면(자), 파일에의 기록은 모두 파일의 말미에 추가됩니다. O_TRUNC 하지만 지정되어 있어 파일이 존재하는 경우, 파일은 길이 0 에 잘라 버릴 수 있습니다. O_EXCL 하지만 O_CREAT (와)과 함께 설정되어 있어 파일이 이미 존재하는 경우, open() (은)는 에러를 돌려줍니다. 이것을 사용해, 간단한 배타적 아크세스록킹메카니즘을 실현될 수 있습니다. O_EXCL 하지만 설정되어 있어 패스명의 마지막 원가요소가 기호 연결의 경우, 비록 기호 연결이 존재하지 않는 이름을 가리키고 있었다고 해도 open() (은)는 처리에 실패합니다. O_NONBLOCK 플래그가 지정되어 있어 open() 호출의 결과, 프로세스가 어떠한 이유로 블록 되면(자) (예를 들어, 다이얼 업 회선으로 캐리어를 기다리고 있는 경우), open() (은)는 즉석에서 돌아옵니다. 프로세스가 오픈한 파일에 최초로 입출력하려고 했을 때, 프로세스는 블록 합니다 (현시점에서는 실장되고 있지 않습니다).

O_FSYNC 하지만 마스크에 사용되었을 경우, 모든 기입은 즉시 디스크에 기입해져 커널은 기입해진 데이터를 캐쉬하지 않고, 기입해야 한다 모든 데이터가 완료할 때까지는 이 기술자에 대한 모든 기입은 돌아오지 않습니다.

O_NOFOLLOW 하지만 마스크에 사용되었을 경우로 open() 에게 건네진 대상 파일이 기호 연결의 경우, open() (은)는 실패합니다.

파일을 오픈할 경우에, flock(2) (을)를 사용한 락을 얻으려면 , 공유 락에 대해서는 O_SHLOCK, 배타적 락에 대해서는 O_EXLOCK (을)를 설정합니다. O_CREAT 그리고 파일을 작성하는 경우, 락 요구가 실패하는 것 (은)는 없습니다 (다만, 하층에 있는 파일 시스템이 락을 서포트하고 있는 경우에 한정합니다).

읽고 쓰기에 있어서의 캐쉬의 효과를 최소화 혹은 잃기 위해서(때문에) O_DIRECT (을)를 사용 가능합니다. 시스템은, 읽고 쓰기하는 데이터의 캐싱을 피하려고 합니다. 데이터의 캐싱을 피할 수 없는 경우, 데이터의 캐쉬에 대한 영향을 최소화합니다. 주의하지 않고 사용하면(자), 본플래그는 극적으로 성능을 열화 시킵니다.

정상적으로 완료하면(자), open() (은)는, 파일 기술자를 나타내는 부가 아닌 정수를 돌려줍니다. 처리에 실패하면(자) -1 를 돌려줍니다. 파일내의 현재의 위치를 마크 한다 파일 포인터는 파일의 선두로 설정됩니다.

새로운 파일이 작성되는 경우, 그 그룹은 파일이 포함되는 디렉토리의 그룹으로 설정됩니다.

새로운 기술자는 execve(2) 시스템 콜을 통해서 오픈된채로 있도록(듯이) 설정됩니다. close(2) (와)과 fcntl(2) (을)를 참조해 주세요.

시스템에는, 1 개의 프로세스에 의해 동시에 오픈할 수 있다 파일 기술자수에 제한이 있습니다. getdtablesize(2) (은)는 현재의 시스템 제한을 돌려줍니다.

반환값

정상적으로 완료하면(자), open() (은)는 파일 기술자인 부가 아닌 정수를 돌려줍니다. 처리에 실패하면(자) -1 가 돌려주어져 에러를 나타내기 위해서(때문에) errno 하지만 설정됩니다.

에러

지정의 파일은 다음의 경우를 제외해 오픈됩니다.
[ENOTDIR]
  패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다.
[ENAMETOOLONG]
  패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다.
[ENOENT]
  지정된 파일이 존재하지 않고, O_CREAT 도 설정되어 있지 않습니다.
[ENOENT]
  존재해야 하는 패스명의 원가요소가 존재하지 않습니다.
[EACCES]
  지정된 패스에는, 검색이 허가되어 있지 않은 디렉토리가 포함되어 있습니다.
[EACCES]
  요구된 퍼미션 (읽기 또는 기록용, 또는 양쪽 모두)이 지정의 플래그에 거부되고 있습니다.
[EACCES]
  O_CREAT 하지만 지정되어 있어, 파일이 존재하지 않고, 한편 파일을 작성한다 디렉토리에 기록 허가가 없습니다.
[ELOOP]
  패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다.
[EISDIR]
  지정의 파일이 디렉토리이며, 이것을 기록용으로 오픈하도록(듯이) 인수가 지정되어 있습니다.
[EROFS]
  지정된 파일은 읽기 전용 파일 시스템상에 있어, 그 파일을 수정하려고 하고 있습니다.
[EMFILE]
  프로세스는, 벌써 오픈할 수 있는 파일 기술자에 관한 제한에 이르고 있습니다.
[ENFILE]
  시스템 파일 테이블이 만배입니다.
[EMLINK]
  O_NOFOLLOW 하지만 지정되어 대상이 기호 연결입니다.
[ENXIO]
  지정의 파일은 캐릭터형 특수 파일 또는 블록형 특수 파일이며, 이 특수 파일에 연결시킬 수 있었던 디바이스는 존재하고 있지 않습니다.
[ENXIO]
  지정된 파일은 FIFO 파이프로, 어느 프로세스로부터도 읽기용으로 오픈되어 있지 않은에도 관계하지 않고, 이것을 기록용으로 오픈하려고 했습니다.
[EINTR]
  open() 조작이 시그널에 의해 끼어들어 되었습니다.
[EOPNOTSUPP]
  O_SHLOCK 또는 O_EXLOCK 하지만 지정되었습니다만, 하층이 되고 있는 파일 시스템은 락을 서포트하고 있지 않습니다.
[EWOULDBLOCK]
  O_NONBLOCK 라고 O_SHLOCK 인가 O_EXLOCK 의 어느 쪽인지가 지정되었습니다만, 파일은 락 되고 있습니다.
[ENOSPC]
  O_CREAT 하지만 지정되어 있어, 파일이 존재하지 않고, 새로운 파일용의 엔트리를 배치중의 디렉토리는, 그 디렉토리를 포함한 파일 시스템에 공간이 남지 않기 때문에 확장할 수 없습니다.
[ENOSPC]
  O_CREAT 하지만 지정되어 있어, 파일이 존재하지 않고, 한편 파일이 작성중의 파일 시스템상에 미사용의 inode 가 없습니다.
[EDQUOT]
  O_CREAT 하지만 지정되어 있어, 파일이 존재하지 않고, 한편 새로운 파일용의 엔트리를 배치중의 디렉토리는, 그 디렉토리를 포함한다 파일 시스템상에서 디스크 블록의 유저의 쿼터가 고갈했기 때문에 확장할 수 없습니다.
[EDQUOT]
  O_CREAT 하지만 지정되어 있어, 파일이 존재하지 않고, 한편 파일을 작성중의 파일 시스템상에서 inode 의 유저의 쿼터가 고갈하고 있습니다.
[EIO] 디렉토리 엔트리를 작성중, 또는 O_CREAT 용무의 inode 를 할당중에 입출력 에러가 발생했습니다.
[ETXTBSY]
  파일은 순수한 수속 (공유 텍스트) 파일로, open() 하지만 기록 액세스를 요구했습니다만, 파일은 실행중입니다.
[EFAULT]
  path (은)는, 프로세스에 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.
[EEXIST]
  O_CREAT (와)과 O_EXCL 하지만 지정되어 있어, 파일이 존재합니다.
[EOPNOTSUPP]
  소켓을 오픈하려고 했습니다 (현시점에서는 실장되고 있지 않습니다).
[EINVAL]
  O_RDONLY, O_WRONLY O_RDWR 의 부정한 조합으로 기술자를 오픈하려고 했습니다.

관련 항목

chmod(2), close(2), dup(2), getdtablesize(2), lseek(2), read(2), umask(2), write(2)

역사

open() 함수는 AT&T v6 그리고 등장했습니다.

OPEN (2) November 16, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

To err is human...to really foul up requires the root password.