在C代码上通过popen执行linux命令[英] linux command executing by popen on C code

本文是小编为大家收集整理的关于在C代码上通过popen执行linux命令的处理方法,想解了在C代码上通过popen执行linux命令的问题怎么解决?在C代码上通过popen执行linux命令问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下的code我指的<一个线程href=\"http://stackoverflow.com/questions/671461/how-can-i-execute-external-commands-in-c-linux\">here使用的popen 函数

  INT主(INT ARGC,CHAR *的argv []){
    FILE *文件=的popen("用ntpdate","R");
    炭缓冲器[100];
    的fscanf(文件"%100S",缓冲区);
    pclose函数(文件);
    的printf("缓冲区:%S \\ n",缓冲区);
    返回0;
}

它输出:

  4月21日3时03分03秒的ntpdate [4393]:没有服务器可以使用,退出
缓冲区:

为什么的printf 不输出什么?如果我使用 LS 作为一个命令,然后printf的输出LS输出.我究竟做错了的ntpdate 执行?

如果我执行以下(指的网页上的code

 的#define COMMAND_LEN 8
#定义DATA_SIZE 512INT主(INT ARGC,CHAR *的argv []){
    FILE * PF;
       字符命令[COMMAND_LEN]
       CHAR数据[DATA_SIZE]       //执行的过程上市
       sprintf的(命令"的ntpdate");       //设置我们的管道进行读取和执行我们的指令.
       PF =的popen(指挥,"R");       如果(!PF){
         fprintf中(标准错误,"无法打开管道输出\\ n");
         返回;
       }       从流程执行//获取数据
       与fgets(数据,DATA_SIZE,PF);       //打印抓住数据到屏幕上.
       fprintf中(标准输出," - %S- \\ N"的数据);       如果(pclose函数(PF)!= 0)
           fprintf中(标准错误,"错误:无法关闭命令流\\ n");       返回0;
}

我得到

  4月21日3时15分45秒的ntpdate [5334]:没有服务器可以使用,退出
-2}"| 4#| -
 错误:无法关闭命令流

什么是在codeS上面的过错?


解决方案

由于输出将会标准错误您需要重定向标准错误像这样:

  FILE *文件=的popen("的ntpdate 2  - ;&安培; 1","R");

这将标准错误重定向到标准输出键,所以你会看到两个输出.第二个问题的fscanf 将在第一次太空停止,所以你可以用替换与fgets :

 与fgets(缓冲,100文件);

本文地址:https://www.itbaoku.cn/post/359108.html