【问题标题】:C: Run a System Command and Get Output? [duplicate]C:运行系统命令并获取输出? [复制]
【发布时间】:2010-10-13 08:57:17
【问题描述】:

可能重复:
How can I run an external program from C and parse its output?

我想在 linux 中运行一个命令并获取它输出的文本,但我希望将此文本打印到屏幕上。还有比制作临时文件更优雅的方法吗?

【问题讨论】:

  • 已经反复讨论过。
  • 标记为重复但不指向它。我不认为这是一个完美的解决方案。同时你说是重复的你应该指向我们。或更好!!根据重复记者的数量进行重定向。

标签: c linux system


【解决方案1】:

您需要某种进程间通信。使用pipe 或共享缓冲区。

【讨论】:

    【解决方案2】:

    您想要“popen”功能。这是一个运行命令“ls /etc”并输出到控制台的示例。

    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main( int argc, char *argv[] )
    {
    
      FILE *fp;
      char path[1035];
    
      /* Open the command for reading. */
      fp = popen("/bin/ls /etc/", "r");
      if (fp == NULL) {
        printf("Failed to run command\n" );
        exit(1);
      }
    
      /* Read the output a line at a time - output it. */
      while (fgets(path, sizeof(path), fp) != NULL) {
        printf("%s", path);
      }
    
      /* close */
      pclose(fp);
    
      return 0;
    }
    

    【讨论】:

    • 将 stderr 重定向到 stdout 可能是个好主意,这样您就可以捕获错误。
    • 如何将标准错误重定向到标准输出?
    • 您应该使用fgets(path, sizeof(path), fp) 而不是sizeof(path)-1。阅读手册
    • @jimi:您可以在通过 popen 运行的 shell 命令中将 stderr 重定向到 stdout,例如fp = popen("/bin/ls /etc/2>&1", "r");
    • 似乎有一种使用 popen 的双向通信,如果我发出一个提示用户确认的命令,那么我会得到提示。如果我只想读取输出并且有提示,我该怎么办,然后我就退出
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2016-06-05
    • 2015-10-25
    • 2015-06-19
    相关资源
    最近更新 更多