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
이렇게 하고 있습니다.
댓글 달기