【问题标题】:calling commands using 'system()' from inside a program从程序内部使用“system()”调用命令
【发布时间】:2013-08-22 07:56:30
【问题描述】:

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

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

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

【问题讨论】:

  • system 返回时,您检查它返回的内容。如果它返回 -1 则有错误。否则程序的主进程已经运行了它的全部过程。
  • System() 如果执行失败,则返回 -1。阅读docs

标签: c system-calls


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    此外,Posix 说

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

    所以您确定命令已完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 2015-07-30
      • 2011-04-15
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2016-12-08
      相关资源
      最近更新 更多