2013-06-14 15 views
2

내 코드에서 사용하려는 프로그램은 명령 줄 도구입니다.내 C 코드에서 프로그램 실행

사용자가 먼저 ./program을 입력하면 사용자가 프로그램에서 제공하는 일부 명령을 사용할 수 있습니다.

나는 내 소스 코드 (myCode.cpp)에서이 명령을 실행하려면 :

#include <stdio.h>  
#include <stdlib.h>  
int main() 
{ 
    int i; 
    printf ("Checking if processor is available..."); 
    if (system(NULL)) puts ("Ok"); 
    else exit (EXIT_FAILURE); 
    printf ("Executing command ...\n"); 
    system ("./program"); 
    system ("command1"); 
    system ("command2"); 

    return 0; 
} 

이 후 내 프로그램 (./myCode)을 실행, 프로그램이 시작되지만이 명령은 실행되지 않습니다.

두 명령을 실행하는 방법은 무엇입니까?

프로그램을 종료 한 후 다음 코드를 어떻게 실행합니까? (system() 이후)

+0

system() repots 오류를 확인 했습니까? –

+1

'system' 명령은 셸에서 인수를 실행하므로 각 호출은 다른 호출과 독립적입니다. 두 명령을 프로그램에 전달하지 않습니다. C 프로그램과'./program' 사이에 파이프를 여는 방법을 배우려면 http://linux.die.net/man/3/popen을보십시오. –

+0

양방향 통신으로 새 프로세스를 시작하는 방법은 http://stackoverflow.com/questions/5094063/fork-pipe-and-exec-process-creation-and-communication –

답변

2

원하는 것을 얻으려면 system()이 아니라 popen()을 사용해야합니다.

Popen은 명령에서 지정한 프로그램을 실행하는 새 프로세스를 시작한 다음 해당 프로그램의 입력 또는 출력 스트림을 사용자 자신의 프로그램에서 사용할 수있는 파일 설명자에 매핑합니다.

그런 다음이 파일 설명자를 통해이 프로그램과 통신 할 수 있습니다.

당신의 코드는 다음과 같다 (실제로 컴파일되지 않음)해야합니다

FILE* file = popen("/path/to/your/program", "w") 

if (!file) { 
    // Something not nice happened 
} 


fprintf(file, "command1\n"); 

//... 

pclose(file); 
1

사용 popen() 대신 system(), 그리고, 프로그램을 가정하는 것은 popen()에 의해 반환되는 FILE*에 명령을 쓰기, 표준 입력에서 해당 명령을합니다 :

FILE* pin = popen("./program", "w"); 
fprintf(pin, "command1\n"); 
fprintf(pin, "command2\n"); 
fflush(pin); 
pclose(pin); // this will wait until ./program terminates 
+0

을 참조하십시오. 사용자가 사용하지 않으면 프로그램이 종료되지 않습니다. "ctrl + c"... pclose (pin) 프로그램을 종료하는 대신 기다리는 것입니까? – user2261693

+0

pclose가 실제로 대기합니다. ./program은 pclose가 리턴하기 위해 뭔가 다른 것으로 닫혀 야합니다. ./program에서 "quit"명령을 구현 한 다음 fwrite (pin, "quit \ n") 명령을 사용하는 것이 좋습니다. 부모 프로세스를 죽이면 조금 더러운 것일 수 있습니다. – rectummelancolique