[UNIX Shell Programming] PIPE 질문입니다.
누림
질문 제목 : [UNIX Shell Programming] PIPE 질문입니다.질문 요약 :PIPE를 이용해서 3개의 command를 처리하려고 하는데 3번째 command 작동이 제대로 이루어지지 않습니다.질문 내용 : 아래 소스코드는 PIPE 처리만 하는 부분의 code 입니다.
int join(char *com1[], char *com2[], char *com3[], int pipecounter)
{
int p1[2], p2[2], status = 0;/* 1st Process =(p1[1] p1[0])= 2nd Process =(p2[1] p2[0])= 3rd Process */
/* 1번째 Command Process 와 2번째 Command Process 사이의 pipe 생성 */
if(pipe(p1) == -1)
fatal(pipe call in join\n);switch(fork())/* Child Process 생성 */
{
case -1:/* Child Process 생성 실패 */
fatal(1st fork call in join\n);
/* ---===--- 1번째 Command 수행을 위한 Process ---===--- */
case 0:
dup2(p1[1],1);/* stdout 을 2번째 Command Process 와의 pipe 로 연결 */
close(p1[0]);/* File Descriptor 를 닫아준다 */
close(p1[1]);
execvp(com1[0], com1);/* 1번째 Command 수행 */
fatal(1st execvp call in join\n);
/* ---===--- 2번째 또는 3번째 Command 수행을 위한 Process ---===--- */
default:
if(pipecounter == 1)/* PIPE 가 1개인 Command 라면 */
{
printf(파이프 1개일때다\n);
dup2(p1[0],0);/* stdin 을 1번째 Command Process 와의 pipe 로 연결 */
close(p1[0]);/* File Descriptor 를 닫아준다 */
close(p1[1]);
execvp(com2[0], com2);/* 2번째 Command 수행 */
fatal(2nd execvp call in join\n);
}
else if(pipecounter == 2)/* PIPE 가 2개인 Command 라면 */
{
/* 2번째 Command Process 와 3번째 Command Process 사이의 pipe 생성 */
if(pipe(p2) == -1)
fatal(pipe call in join\n);
switch(fork())/* Child Process 생성 */
{
case -1:/* Child Process 생성 실패 */
fatal(2nd fork call in join\n);
/* 2번째 Command 수행을 위한 Process */
case 0:
printf(2커맨드 실행한다\n);
dup2(p1[0],0);/* stdin 을 1번째 Command Process 와의 pipe 로 연결 */
close(p1[0]);/* File Descriptor 를 닫아준다 */
close(p1[1]);dup2(p2[1],1);/* stdout 을 3번째 Command Process 와의 pipe 로 연결 */
close(p2[0]);/* File Descriptor 를 닫아준다 */
close(p2[1]);
execvp(com2[0], com2);/* 2번째 Command 수행 */
fatal(2nd execvp call in join\n);
/* 3번째 Command 수행을 위한 Parent Process */
default:
printf(3커맨드 실행한다\n);
dup2(p2[0],0);/* stdin 을 2번째 Command Process 와의 pipe 로 연결 */
close(p2[0]);/* File Descriptor 를 닫아준다 */
close(p2[1]);
execvp(com3[0], com3);/* 3번째 Command 수행 */
fatal(3rd execvp call in join\n);
}
}
}
}
실제로 테스트 해보니 2번째 command와 3번째 command 사이에 생성한 pipe에 문제가 있는것 같습니다.
stdout : .............
이런 에러를 출력하는데요. 문법적으로 문제가 있는건지 어떤건지
아무리 생각해봐도 무슨 문제인지를 모르겠습니다.
고수님들의 조언을 구합니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2668615 | 2차방정식 근 구하는 프로그램 질문입니당 ㅠ (1) | 삐용삐용 | 2024-09-16 |
2668560 | fgets함수 출력할때.. | 민트맛사탕 | 2024-09-16 |
2668508 | c언어 공부법~~ | 옆집오빠야 | 2024-09-15 |
2668460 | 2차원배열 사용자정의 함수이용하여 동적할당 (1) | 울트라 | 2024-09-15 |
2668434 | 반석차랑 전체석차 어케 구하죠? | 내꺼하자 | 2024-09-15 |
2668412 | return 용도 | 유리 | 2024-09-14 |
2668383 | 열혈강의C 연산자 연습문제 관해서 질문드려요. (1) | 흰추위 | 2024-09-14 |
2668329 | 게임의 제작 방법과 소스를 어떻게 알 수 있을까요? | 꽃내 | 2024-09-14 |
2668301 | do while질문이요 | 댓걸 | 2024-09-13 |
2668223 | C 언어 도와주세요 ..ㅜ.ㅜ (1) | 제나 | 2024-09-13 |
2668126 | B 트리에 삽입에 대해 질문이 있습니다. | 이하얀 | 2024-09-12 |
2668097 | 포인터와 배열 질문입니다 ;~; (3) | 흰추위 | 2024-09-11 |
2668073 | C언어 질문요. (3) | 횃불 | 2024-09-11 |
2668022 | 링크드리스트 정렬 질문이에욤 | 단순드립 | 2024-09-11 |
2667968 | 오늘 마감인데...오류좀 찾아주세요 ㅜㅜ (2) | 갈매빛 | 2024-09-10 |
2667940 | C언어 하수가 질문드립니다 ㅠㅠ | 이솔 | 2024-09-10 |
2667906 | 논리연산자 문제.. (1) | 칸나 | 2024-09-10 |
2667879 | 간단한 배열 질문 | 호시 | 2024-09-09 |
2667850 | 소수를 판단하는 함수를 정의하는 프로그램 (1) | 인1형녀 | 2024-09-09 |
2667826 | #define 중에 첨보는 구문질문 | 냐하 | 2024-09-09 |