2014-10-08 1 views
0

나는 count = read(pipe, buffer, buffsize);을 가지고 있으며 다른 프로세스를 실행하기 위해 다른 실행 파일을 통해받은 (버퍼) 것을 실행하려고합니다.문자열을 표준 입력으로 실행 파일에 전달하십시오.

printf("%s", buffer);은 정확하게 인쇄하지만 execl("/path", "/path", buffer, NULL); 또는 다른 방법으로 실행하면 실행 파일이 실행되지 않는 것 같습니다. path은 컴파일 된 실행 파일입니다.

실행 파일 execv("./path", STDIN_FILENO);을 사용하면이 제대로 실행되지만 파이프에서는 가져 오지 않습니다. path은 문자열을 표준 입력으로 기다리고 있습니다.

프로그램의 상황은 while 루프와 read()을 사용하여 하나의 프로그램에 입력을 입력하고 파이프를 사용하여 해당 텍스트를 execl을 실행하는 프로그램에 보내는 것입니다 (이 외에는 아무것도 수행 할 필요가 없습니다.) 프로그램)을 호출하면 실행 파일을 stdin과 같은 문자열로 호출하려고 시도합니다. 사용자가 enter 키를 누르면 의도 된 입력 만 파이프를 통해 들어옵니다.

파이프를 통해 들어오는 문자열의 예는 this is an example입니다. 실행 파일은 이것을 표준 입력으로 입력해야합니다.

문자열을 /path 실행 파일의 표준 입력으로 올바르게 사용하려면 어떻게해야합니까?

+0

여기 엃 여러 가지 문제가있다; 우리는 더 많은 정보가 필요합니다. 두 번째 실행 파일이 stdin에서 입력을 기대하거나 명령 줄 인수로 사용합니까? * 전혀 실행되지 않습니까? 아니면 예상대로 입력을 처리하지 못합니까? 자식 프로세스 또는 원래 프로세스에서'execl'을하고 있습니까? 파이프에 들어오는 것이 있습니까? 아니면 두 번째 실행 파일의 의도 된 입력입니까? 이 모든 작업을 수행하는 프로그램에 필요한 다른 작업이 있습니까? – zwol

+0

@ Zack 감사합니다. 포함해야 할 것이 무엇인지 확신 할 수 없었습니다. 더 많은 정보를 추가했습니다. –

+0

파이프를 통해 나오는 문자열이 "this is an example"일 때,'count'의 값은 무엇입니까? – chux

답변

1

popen()은 원하는 실행 파일로 파이프를 열어 표준 입력에 물건을 전달하거나 표준 출력에서 ​​물건을 읽을 수있는 것처럼 들립니다.

#define _POSIX_C_SOURCE 200809L 

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

int main(void) { 
    FILE * p = popen("/bin/cat", "w"); 
    if (!p) { 
     perror("error opening pipe"); 
     return EXIT_FAILURE; 
    } 

    fputs("Echo me via /bin/cat\n", p); 

    if (pclose(p) == -1) { 
     perror("error closing pipe"); 
     return EXIT_FAILURE; 
    } 

    return 0; 
} 

출력한다 : 예를 들어

[email protected]:~/src/sandbox$ ./testpopen 
Echo me via /bin/cat 
[email protected]:~/src/sandbox$ 
+0

나는 문제를 명확하게하지 않았는지 또는 귀하의 답변을 오해하고 있는지 확실하지 않습니다. 문제는 입력 프로그램에서 파이프를 통해 두 번째 프로그램으로 텍스트를 전송하는 것이 아니라 두 번째 프로그램에서 실행 파일로 텍스트를 전송하는 것입니다. –

+0

@ZachSaucier : 두 번째 프로그램에서'popen()'을 사용하여 실행할 수 있습니다 실행 파일을 만들고 표준 입력에 텍스트를 전달하십시오. –

+0

알겠습니다. 실행 파일이 실행되고 있지 않습니까? 또한 나는 우리에게 주어진 것처럼 실행 파일의 코드를 변경하지 않기를 원한다. (학교 프로젝트) –

관련 문제