从程序内部使用'system()'调用命令

时间:2013-08-22 07:56:30

标签: c system-calls

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

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

在此示例中,在打开文件进行读取之后,无法确保 cmd 完全执行。而且,我想确保这一点。有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

  

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

此外Posix说

  

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

所以你确定命令已经完成。