2014-07-15 8 views
1

2 개의 별도 exe 파일을 호출하고 csv 파일을 출력하고 출력 할 때까지 기다렸다가 그 결과 파일을 읽어야하는 테스트 프로그램을 작성하고 있습니다.C - 실행 파일을 실행하고 끝날 때까지 기다림

저는 파이프를 만들고 출력을 보여주기 위해 현재 _popen을 사용하고 있습니다.하지만 실제로는 아무 것도 필요하지 않습니다. feof은 무의미한 것처럼 보입니다.

  • 내가 자신의 cmd를 창에 팝업 내 응용 프로그램을 실행 :

    는 내가 가지고 싶은 것은 이것이다.

  • 그것은 그것의 자신의 창안에 모두를하는 exe1를 부른다.
  • 자체 윈도우에서 모든 것을 수행하는 exe2를 호출합니다.
  • 둘 다 종료하면 계속됩니다.

다른 방법이 있습니까?

편집 : 주위에 놀아 난 System("exe1");을 사용하면 본질적으로 지금하고있는 것이 하나의 줄로 나타납니다. 아니면 여기에 뭔가 빠졌나요?

int runTest(char* testName) 
{ 
    char psBuffer[128]; 
    FILE *pPipe; 

    if ((pPipe = _popen(testName, "r")) == NULL) 
    { 
     printf("Failed to open %s", testName); 
     return 0; 
    } 

    while (fgets(psBuffer, 128, pPipe)) 
    { 
     printf(psBuffer); 
    } 

    if (feof(pPipe)) 
    { 
     printf("%s returned %d\n", testName, _pclose(pPipe)); 
     return 1; 
    } 
    else 
    { 
     printf("Error: Failed to read the pipe to the end.\n"); 
     return 0; 
    } 
} 
+1

Windows를 사용하고 계신 것 같습니까? 유닉스의 경우 [fork] (http://en.wikipedia.org/wiki/Fork_ (system_call))를 수행 한 다음 하위 프로그램에서 exec를 수행하고 해당 PID에 대한 부모를 기다릴 수 있습니다 (stdin/stdout를 필요한 경우 자녀). 어쩌면 비슷한 해결책이 또한 작동 할 것이지만, 나는 당신에게 어떤 세부 사항도 줄 수 없다. ... –

+0

'system ("path \\ to \\ your.exe");은 당신이 원하는 것을한다. 실행 파일이 종료하는 종료 값이 필요하면'system' 호출의 리턴 값을 확인하십시오. 이것은 Windows 용 trie입니다. – ThoAppelsin

답변

0

이처럼 스레드 수

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

void*   thread_2(void *arg) 
{ 
    system("./exec2"); 
    pthread_exit(NULL); 
} 

void*   thread_1(void *arg) 
{ 
    system("./exec1"); 
    pthread_exit(NULL); 
} 

void* (*func_ptr[2])(void*) = { thread_1, thread_2 }; 

void   main() 
{ 
    pthread_t  thread_pool[2]; 

    for (int i = 0; i < 2; i++) 
    pthread_create(&thread_pool[i], NULL, func_ptr[i], NULL); 
    for (int i = 0; i < 2; i++) 
    pthread_join(thread_pool[i], NULL); 
} 

희망이 당신을 도울 것입니다.

관련 문제