pipe에 관한 질문.
글쓴이: papa3721 / 작성시간: 금, 2007/10/12 - 9:42오후
pipe를 공부하고 있습니다. 블럭이 이루어 지는 것은 읽을 내용이 없을시와 내용을 쓸때 파이트가 full인 상황일때 라고 알고 있습니다.
근데 아래 경우는 좀 이해 하기 힘드네요..
상황이.. L1,L2,L3를 각각 주석 처리하고 결과를 보는 것인데, 전부 블럭이 되어 버리네요..
위에 L1,L2,L3를 그림으로 표현해 보았는데, 처음이라서 그런지 이해가 쉽지 못하네요..
설명 부탁드림니다.. ㅠ.ㅠ
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <sys/types.h> #include <unistd.h> /* A sends: Hello, world! A receives: hELLO, WORLD! process A close(BA[1]) at line L1; close(AB[1]) at line L2; process B close(AB[1]) at line L3. */ char *msg="Hello, world!"; /* convert upper case to lower case or vise versa */ char conv(char c) { if (islower(c)) return toupper(c); if (isupper(c)) return tolower(c); return c; } int main(int argc, char **argv) { pid_t pid, AB[2], BA[2]; char buf[20]; /* create two pipes */ if (pipe(AB)<0 || pipe(BA)<0) perror("pipe calls"), exit(1); /* create process B */ if ((pid=fork())<0) perror("fork call"), exit(2); if (pid>0) { /* process A */ close(AB[0]); if(argv[1] == NULL || argv[1] == "2" || argv[1] == "3") close(BA[1]); // L1 printf(" A sends: %s\n", msg); write(AB[1], msg, strlen(msg)); if(argv[1] == NULL || argv[1] == "1" || argv[1] == "3") close(AB[1]); // L2 printf("A receives: "); while (read(BA[0], buf, 1)==1) printf("%c", buf[0]); printf("\n"); exit(0); } if (pid==0) { /* process B */ close(BA[0]); if(argv[1] == NULL || argv[1] == "1" || argv[1] == "2") close(AB[1]); // L3 while (read(AB[0], buf, 1)==1) { buf[0] = conv(buf[0]); write(BA[1], buf, 1); } exit(0); } return 0; }
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 8.06 KB |
Forums:
실행시.
L1 주석 처리
./a.out 1
L2 주석 처리
./a.out 2
L3 주석 처리
./a.out 3
이렇게 하고 있습니다.
댓글 달기