1

我想使用 system() 从 C 程序内部执行一些可执行文件。我要确保命令完全执行;之后,我想使用之前执行的命令的输出。例如:

{
  ...
  ...
  sprintf(cmd, "./a1.out > temp.txt");
  system(cmd);
  fp = fopen("temp.txt", "r");
  ...
  ...
}

在这个例子中,并不能保证cmd在打开文件读取之后完全执行。而且,我想确保这一点。有什么帮助吗?

4

2 回答 2

2

您可以使用popen()来执行命令并直接读取其输出。

fp = popen("./a1.out", "r");
if (fp) {
    ...
    r = pclose(fp);
    if (r < 0) {
        /*...command exited abnormally */
    }
} else {
    /*...fork or pipe error */
}

如果需要,您可以选择将数据写入文件。

于 2013-08-22T08:02:00.067 回答
1

我不知道你正在使用的操作系统,但在 Linux 下手册说

system() 通过调用 /bin/sh -c 命令执行 command 中指定的命令,并在命令完成后返回。

此外,Posix 说

system() 函数在子进程终止之前不会返回。

因此,您确定命令已完成。

于 2013-08-22T08:02:32.740 回答