# include <unistd.h>
int pipe(int filedes[2]);
/* 성공시 0, 실패시 -1을 반환 */
read 실행시 파이프가 비어있으면 read가 block되고 write 실행시 파이프가 꽉 차있으면 write가 block된다. 정상적인 경우는 모두 금방 return된다.
main(){
char inbuf[MSGSIZE];
int p[2], j;
pid_t pid;
pipe(p); //pipe 선언
switch (pid = fork()){
case -1: perror ("fork call"); exit (2);
/*
자식 프로세스는 p[1]에 write를 진행한다.
*/
case 0:
close (p[0]); //불필요한 부분은 닫는다.
write (p[1], msg1, MSGSIZE);
write (p[1], msg2, MSGSIZE);
write (p[1], msg3, MSGSIZE);
break,
/*
부모 프로세스는 child가 pipe에 write값을 차례로 읽어온 후 출력한다.(FIFO)
*/
default:
close (p[1]); //불필요한 부분은 닫는다.
for (j = o; j < 3; j++){
read (p[0], inbuf, MSGSIZE);
printf ("%s\n", inbuf);
}
wait (NULL);
}
exit (0);
}
작성중