[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 : .............
이런 에러를 출력하는데요. 문법적으로 문제가 있는건지 어떤건지
아무리 생각해봐도 무슨 문제인지를 모르겠습니다.
고수님들의 조언을 구합니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2690486 | 문자열과 문자형이요 ~ | 다스리 | 2025-04-05 |
2690344 | 일본어 주석 깨짐 문제 (3) | 연하얀 | 2025-04-04 |
2690314 | 암호문 만들기 -비제네르- | 이퓨리한나 | 2025-04-03 |
2690292 | 왕초보자의 질문!!!!!! 도와주세요 (1) | 하랑 | 2025-04-03 |
2690269 | 정올 문제 인데.. 흠 | 반월 | 2025-04-03 |
2690237 | sizeof에서 short형을 썻는데 왜 4byte가 나올까요? (1) | 바나나 | 2025-04-03 |
2690183 | 문자열과 포인트 비교 (2) | 미즈 | 2025-04-02 |
2690154 | a -48 ? | 희미한눈물 | 2025-04-02 |
2690094 | 테트리스 질문요. | 지후 | 2025-04-01 |
2690066 | 문자열비교!! (1) | 매디 | 2025-04-01 |
2689888 | 좀도와주세요;; ㅠㅠ | 사람 | 2025-03-30 |
2689856 | 메뉴 그리는 거 질문 | 나라빛 | 2025-03-30 |
2689831 | c언어 프로그램 추천 | 하연 | 2025-03-30 |
2689801 | c언어 time.h에서 작동이 중지되었습니다. | 하람 | 2025-03-30 |
2689772 | 2차원 배열의 배열명에 대해서.. | 옆집꼬마야 | 2025-03-29 |
2689740 | 게임 TCP소켓 질문 (2) | 불꾼 | 2025-03-29 |
2689711 | 반복문 모래시계 | 한뎃집 | 2025-03-29 |
2689685 | 경우의 수에 따른 결과 처리 질문드립니다. (2) | 다흰 | 2025-03-29 |
2689655 | .exe에 아이콘 넣는 법좀 알려주세요 | 연하얀 | 2025-03-28 |
2689631 | #define 전처리문에 대해서 (2) | 사랑은아픔 | 2025-03-28 |