tail head cat sleep
QR code linking to this page

Man page  — DUP

명칭

dup, dup2 – 기존의 파일 기술자를 복제한다

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <unistd.h>

int
dup(int oldd);

int
dup2(int oldd, int newd);

해설

dup() (은)는 기존의 오브젝트 기술자를 복제해, 그 값을 호출해 프로세스에 돌려줍니다 (, newd = dup(oldd)). 인수 oldd (은)는 프로세스의 기술자 테이블내의 인덱스로, 부가 아닌 작은 정수입니다. 그 값은 테이블의 사이즈보다 작지 않으면 안됩니다. 테이블의 사이즈는 getdtablesize(2) 에 의해 돌려주어집니다. dup() 호출은, 그 때에 프로세스에 의해 사용되어 있지 않은 번호 가운데, 가장 작은 번호가 붙은 기술자를 돌려줍니다.

기술자가 참조하는 오브젝트는 oldd (와)과 newd (을)를 전혀 구별하지 않습니다. 따라서 newd (와)과 oldd 하지만 오픈된 파일에의 복제된 참조였던 경우, 모든 read(2), write(2)lseek(2) 호출은, 단일의 포인터를 파일내에서 이동합니다. 추가 모드, 논브록킹 입출력 및 비동기 입출력 옵션은 각 참조동안에서 공유됩니다. 하나의 파일에의 다른 포인터가 필요한 경우는, 추가의 open(2) (을)를 호출해, 파일에의 다른 오브젝트 참조를 얻을 필요가 있습니다. 이 때, 새로운 파일 기술자의 close-on-exec 플래그는 설정 해제되고 있습니다.

dup2() 에는 새로운 기술자 newd 의 값을 지정합니다. 이 기술자가 이미 사용되고 있었을 경우, olddnewd 이면, 우선 그 기술자는 close(2) 하지만 불려 갔는지와 같이 할당 해제됩니다. oldd 하지만 유효한 기술자가 아니었던 경우에는, newd (은)는 클로우즈 되지 않습니다. oldd == newd (이어)여, 게다가 oldd 하지만 유효한 기술자의 경우, dup2() (은)는 정상적으로 종료해, 아무것도 하지 않습니다.

반환값

몇개의 호출로 에러가 일어났을 경우는 값 -1 이 돌려주어집니다. 외부 변수 errno (은)는 에러의 원인을 나타냅니다.

에러

dup() (와)과 dup2() (은)는 다음의 경우에 처리에 실패합니다.
[EBADF]
  oldd 또는 newd 하지만 유효한 액티브 기술자가 아닙니다.
[EMFILE]
  액티브한 기술자가 너무 많습니다.

관련 항목

accept(2), close(2), fcntl(2), getdtablesize(2), open(2), pipe(2), socket(2), socketpair(2)

표준

dup() 함수와 dup2() 함수는, IEEE Std 1003.1-90 ("POSIX.1") 에 준거하고 있습니다.

역사

dup() 함수와 dup2() 함수는 AT&T v7 그리고 등장했습니다.

DUP (2) June 4, 1993

tail head cat sleep
QR code linking to this page


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