🔎 pipe()
c
#include <unistd.h>
int pipe(int pipefd[2]);
부모 프로세스가 자식 프로세스를 생성할 때 부모 프로세스는 자식 프로세스에 데이터를 줘야 한다. 따라서 pipe()함수로 데이터를 주게 되는데, pipe() 함수는 데이터 스트림 두 개를 만든다.
fd[0]은 read 부분, fd[1]은 write 부분인데, 파이프가 기준이 아니라 프로세스 기준임.
다만 파이프는 한 방향으로만 작동하므로 파이프를 두 개 생성해야 부모 자식 프로세스가 데이터를 주고받는 것이 가능하다.
만약 자식 프로세스의 데이터를 부모 프로세스로 넘긴다고 하면
자식 프로세스에서 close(fd[0]); 를 해준다.
자식 프로세스는 write만 하고 read는 하지 않기 때문이다.
한 쪽을 닫는 이유는 한쪽이 닫힌 파이프는 widowed pipe가 되는데,
이 때 SIGPIPE 시그널이 발생하게 된다.
그러면서 EOF도 부모 프로세스로 전달된다.