PIPE(2)

명칭
pipe - 프로세스간 통신을 위한 기술자의 페어를 작성한다

프로그램 라이브러리
libc

서식
<unistd.h> int pipe(int *fildes)

해설
pipe() 함수는 쌍방향의 데이터 플로우(flow)를 가능으로 하는 오브젝트이다 pipe (을)를 작성해, 페어의 파일 기술자를 할당합니다.

관습에 의해, 통상은 1 번째의 기술자가 파이프의 읽기측 (으)로서 사용되어 2 번째의 기술자가 기록측 (으)로서 사용됩니다. 그러므로, fildes[1] 에 쓰기데이터가 fildes[0] 에 나타납니다 (즉, fildes[0] (으)로부터 독해). 이것을 사용하면 1 개의 프로그램의 출력을 다른 프로그램에 송신할 수 있습니다. 송신측의 표준 출력을 파이프의 기록측으로서 셋업 해, 수신측의 표준 입력을 파이프의 읽기측으로서 셋업 해 주세요. 파이프 자체는, 모든 대응하는 기술자가 클로우즈 될 때까지 지속합니다.

일단이 닫고 있는 파이프는 widowed (상대를 잃었다)(이)라고 보여집니다. 이러한 파이프에 기록을 하면(자), 기록 프로세스는 SIGPIPE 시그널을 수신합니다. 읽기 측에 파일의 종료를 전하는 방법은, 기록측의 파이프를 클로우즈 할 수 밖에 없습니다. 읽기측이 버퍼에 들어가 있는 데이터를 다 사용한 후, 상대를 잃은 파이프를 독해와 0 카운트가 돌려주어집니다.

이 파이프의 실장에 있어서의 쌍방향이라고 하는 성질은, 낡은 시스템과 호환성이 없습니다. 그러므로, 파이프를 한방향 밖에 사용하지 않을 때에는, 종래의 방법으로 단 점을 사용하는 이 관습에 따르는 것을 추천합니다.

반환값

에러
pipe() 호출은 다음의 경우에 실패합니다.

[EMFILE]
    액티브한 기술자가 너무 많습니다.

[ENFILE]
    시스템 파일 테이블이 만배입니다.

[EFAULT]
    fildes 버퍼가 프로세스의 address 공간의 부정한 area에 있습니다.

관련 항목
sh(1), fork(2), read(2), socketpair(2), write(2)

역사
pipe() 함수는 AT&T UNIX 그리고 등장했습니다.

쌍방향 파이프는 처음 AT&T UNIX 4 그리고 사용되었습니다.