내 프로그램의 목표는 서로 파이프를 읽고 쓰는 것을 의사 소통하는 두 개의 파이프와 두 개의 프로세스를 만드는 것입니다.파이프()와 포크()
- 프로세스 P1은 배관 (C1)로부터 판독하고
- 프로세스 P2가 파이프 (C2)로부터 판독하고, 파이프로부터 판독 수가 BIG_INT_STOP 미만까지 파이프 C1
에 기록 파이프 C2 쓰는 두 프로세스는 파이프의 수를 계속 증가시킵니다. 이 조건이 참하자마자 그것을 읽는 첫 번째 프로세스가 파이프를 닫고 종료하고 번호를 인쇄합니다. 문제는 프로세스 p2가 p1 이전에 끝나면 프로세스 p1이 작동하고 프로세스 p1이 p2 전에 끝나면 루프가됩니다. 이유를 설명해 주시겠습니까?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sysinfo.h>
#include <sys/wait.h>
#include <errno.h>
#include <time.h>
#include <string.h>
#define BIG_INT_STOP 40
#define TEST_ERROR if (errno) {fprintf(stderr, \
"%s:%d: PID=%5d: Error %d (%s)\n", \
__FILE__, \
__LINE__, \
getpid(), \
errno, \
strerror(errno));}
int main(){
int c1[2], c2[2], p1, p2, z;
long a = 0, c;
pipe(c1);
pipe(c2);
write(c1[1], &a, sizeof(a));
write(c2[1], &a, sizeof(a));
p1 = fork();
p2 = fork();
switch(p1){
case -1:
TEST_ERROR;
exit(EXIT_FAILURE);
case 0:
read(c1[0], &c, sizeof(c));
while(c != BIG_INT_STOP){
++c;
write(c2[1], &c, sizeof(c));
read(c1[0], &c, sizeof(c));
}
close(c1[0]);
close(c1[1]);
close(c2[0]);
close(c2[1]);
printf("p1: %ld\n", c);
exit(0);
}
switch(p2){
case -1:
TEST_ERROR;
exit(EXIT_FAILURE);
case 0:
read(c2[0], &c, sizeof(c));
while(c != BIG_INT_STOP){
++c;
write(c1[1], &c, sizeof(c));
read(c2[0], &c, sizeof(c));
}
close(c1[0]);
close(c1[1]);
close(c2[0]);
close(c2[1]);
printf("p2: %ld\n", c);
exit(0);
}
while(wait(&z) != -1);
}
쓰기 바이트 및/또는 오류 코드에 대해 '쓰기'및 '읽기'결과를 확인하지 않았을 수 있습니다. – Marian
2 개의 프로세스가 프로그램 실행 종료시 항상 번호를 인쇄하므로 오류가 발생하는 이유는 무엇입니까? – Lorenzo