如何让我的c ++代码知道命令是否来自" system(cmd)"失败与否?

时间:2016-10-05 12:37:41

标签: c++ linux unix

假设我在c ++上使用system("foocmd param1")运行unix命令。 如果foocmd返回"无效的参数"通过stderr返回终端,然后如何获取我的c ++代码以了解foocmd是否失败?

这是我尝试的解决方案:

我的假设是我应该通过调用命令检查是否有任何东西返回到stderr。 为此,我尝试切换到popen。目前,这是我检查的方式。我首先将我的stderr输出到一个文件中。

sprintf(cmd, "foocmd param1 2>temp.txt");
system(cmd);

然后我检查temp.txt是否为空。

但必须有更好的方法。任何人都可以帮我一把吗?

1 个答案:

答案 0 :(得分:2)

通常的方法是检查system()的返回值:

  • 如果为零,则命令成功执行并退出状态为0
  • 如果它是否定的,那么system()本身就会出现问题,您无法承担任何责任。
  • 如果是肯定的,那么您可以使用WEXITSTATUS()和相关的宏来了解流程是如何退出的。

有关详细信息,请参阅system(3)手册页。

大多数情况下,您只对命令是否成功感兴趣:

if (!system(cmd)) {
    syslog(LOG_WARNING, "Command \"%s\" failed", cmd);
    /* maybe some more error handling here */
    goto err_return;
}