C - 运行可执行文件并等待它完成

时间:2014-07-15 12:21:51

标签: c file-io exe

我正在编写一个测试程序,需要调用2个单独的exe文件,等待它们完成并输出它们的csv文件,然后读入这些结果文件。

我目前正在使用_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 个答案:

答案 0 :(得分: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);
}

希望这会对你有所帮助。