4

我使用下面的代码在Linux中通过C运行命令,我只能得到这个函数的输出,如何检测它是否运行成功?有没有代表这个的返回码?

const char * run_command(const char * command)
{

    const int BUFSIZE = 1000;

    FILE *fp;
    char buf[BUFSIZE];

    if((fp = popen(command, "r")) == NULL)
       perror("popen");
    while((fgets(buf, BUFSIZE, fp)) != NULL)
       printf("%s",buf);

    pclose(fp);

    return buf;
}
4

3 回答 3

8

pclose()返回被调用程序的退出状态(如果 wait4() failed() 则返回 -1,请参见手册页)因此您可以检查:

#include <sys/types.h>
#include <sys/wait.h>

....

int status, code;

status = pclose( fp );
if( status != -1 ) {
    if( WIFEXITED(status) ) {  // normal exit
         code = WEXITSTATUS(status);
         if( code != 0 ) {
              // normally indicats an error
         }
    } else {
         // abnormal termination, e.g. process terminated by signal           
    }
}

我使用的宏在这里描述

于 2013-09-03T14:39:01.850 回答
5

pclose(3)文档中:

pclose()函数等待关联进程终止;它返回命令的退出状态,如wait4(2).

于 2013-09-03T14:38:52.267 回答
1

pclose 返回管道的退出代码。

于 2013-09-03T14:39:15.983 回答