2014-05-21 2 views
0

UNIX 시스템에서 파이프의 올바른 사용법을 이해하는 데 문제가 있습니다. 하위 프로세스를 만드는 주 프로세스가 있습니다. 자식 프로세스는 아버지와 다른 프로그램을 실행해야하며, 일부 작업을 수행해야하며 그 결과 자식은 결과를 아버지에게 전달해야합니다. 그러나 자식 프로세스에서 터미널에서이 작업의 부분 결과를 인쇄해야합니다. 테스트 프로그램을 사용하여 테스트 중이지만 지금 당장 막혔습니다. 이 메인 테스트 프로그램표준 출력 및 exec에서 파이프 사용

TEST.C

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main(){ 

    int mypipe[2]; 
    pid_t pid; 
    char readbuffer[6]; 

    pipe(mypipe); 

    if((pid = fork()) == 0){ 
    close(mypipe[0]); 
    dup2(mypipe[1], STDOUT_FILENO); 
    execlp("./proc", "./proc", NULL); 
    } else { 

    wait(-1); 
    close(mypipe[1]); 
    read(mypipe[0], readbuffer, sizeof(readbuffer)); 
    printf("%s", readbuffer); 
    } 
} 

그리고 ./proc 프로그램의 C 파일 것은 이것이다 :이 솔루션은 시저와 PROC.C

#include <stdio.h> 

int main(int argc, char* argv[]){ 

    printf("check\n"); 

    return 0; 
} 

프로그램이 터미널에서 아무 것도 인쇄 할 수 없습니다. 주 프로그램이 거기에서 읽을 수 있도록 어떻게 터미널에서 그리고 파이프에 인쇄 할 proc 프로그램을 만들까요 ??? 감사합니다.

답변

1

stdout을 상위 프로그램으로 리디렉션하는 경우에도 여전히 stderr을 사용할 수 있습니다. 콘솔로 인쇄하려면 printf(...) 대신 fprintf(stderr, ...)으로 전화하십시오. 당신이 당신의 "PROC"프로그램이 로그/디버그 정보를 정기적를위한 터미널에서 인쇄하려면

+0

다른 방법으로 사용할 수 있습니까? – Astinog

1

는, u는 fprintf와 및 stderr 사용할 수 있습니다,

fprintf(stderr, "What you need to print\n"); 

당신은 또한 당신의 프로그램이 쓰는 위치를 확인할 수를 사용 strace