2016-10-10 3 views
0

하나의 프로그램 만 실행하여 이름이 지정된 파이프 즉 fifo를 사용하여 두 개의 프로그램을 실행해야하는지 궁금합니다. 예를 들어, 여기에 언급 된 솔루션 [두 파이프 사이의 문자열 보내기] [1]은 하나의 터미널 만 사용하여 실행할 수 있습니까? 어쨌든 reader.c에서 writer.c를 호출하고 reader.c를 실행하여 전체 프로그램을 실행해야합니까?단일 터미널에서 fifo 파이프 실행

EDIT : 많은 문제가 있었기 때문에 코드를 삭제했습니다. 나는 그들에 대한 지식이 없어도 많은 기능을 사용하고있었습니다.

마감. 는 popen 기능은 다음 어떤 C와 함께 사용할 수있는 파일 *를 반환

https://linux.die.net/man/3/popen

I/O 기능을 버퍼 : 당신의 독자 프로그램 내에서 writer.py을 실행할 수는 popen() 함수를 사용

+2

하나의 프로그램 또는 하나의 프로세스? 당신은'fork()'를 사용하여 작가와 리더 프로세스로 나눌 수있는 하나의 프로그램을 만들 수있다. – Barmar

+0

제목에 단일 터미널이 표시 되나요? 하나의 터미널에서 여러 프로그램을 실행할 수 있다는 것을 알고 있습니까? 백그라운드에서 첫 번째 프로그램을 실행 한 다음 두 번째 프로그램을 시작하십시오. – Barmar

+0

백그라운드에서 하나의 프로그램을 실행하려면 어떻게해야합니까? 위의 예제에서 한 터미널에 ./reader.c를 입력하는 것만으로 writer.c를 실행하는 방법은 무엇입니까? –

답변

1

. 예 :

#include <stdio.h> 
#include <errno.h> 

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

    FILE *fp; 
    if((fp = popen("/path/to/writer.py", "r")) == NULL) { 
     // handle error in some way 
     perror("popen"); 
     exit(1); 
    } 

    size_t numbytes; 
    char buffer[255]; 

    // Here we read the output from the writer.py and rewrite it to 
    // stdout. The result should look the same as if you ran writer.py 
    // by itself.. not very useful. But you would replace this with code 
    // that does something useful with the data from writer.py 

    while((numbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { 
     fwrite(buffer, 1, numbytes, stdout); 
     // should check for error here 
    } 

    pclose(fp); 
    exit(0); 
} 

PS : 나는 컴파일 또는이 프로그램을 실행하지 않은, 그것은 당신에게 아이디어를주고 그냥 예입니다 ...하지만 그것은 작동합니다. 또한 .. 나는 한 곳에서는 writer.c를, 다른 곳에서는 writer.py라고 말한 것을 알았다. 어떤 언어 작성자가 쓰여졌는지는 중요하지 않습니다. popen()에 전달한 프로그램 경로명이 stdout에 쓰여지는 결과를내는 한, 작동 할 것입니다.

+0

답장을 보내 주셔서 감사합니다. 내 게시물을 편집했습니다. 내 코드에서 귀하의 popen 솔루션을 사용할 수있는 방법을 알려주십시오. –

+0

게시 한 코드에서 작성자 프로그램을 어디에서 실행하려고합니까? fifo를 필요로하지 않습니다. popen이 여러분에게 줄 수있는 보통 파이프 (popen()은 실제로 시스템 콜 (함수) pipe()와 fork()와 fdopen()을 사용하여 모든 작업을 수행합니다. 내가 너에게 보여준대로 popen()을 사용해라.) –

+0

나는 fifo를 사용해야한다. 어쨌든 FIFO 파이프를 사용하고 C에서 writer.py를 실행합니까? –

관련 문제