如何在c ++中获得linux命令的输出字符串和输出状态

我想在C ++程序中获得Linux命令的输出字符串以及命令输出状态。 我正在执行我的应用程序中的Linux命令。

例如:命令:

rmdir abcd

命令输出字符串:

rmdir:无法删除`abcd':没有这样的文件或目录

命令状态:

1(表示命令失败)

我尝试使用Linux函数system() ,它给出了输出状态,函数popen()给出了一个命令的输出字符串,但是这两个函数都没有给出Linux命令的输出字符串和输出状态。


输出字符串是标准输出或标准错误描述符(分别为1或2)。

你必须重定向这些流(看看dupdup2函数)到一个可以读取它们的地方(例如 - 一个POSIX pipe )。

在C我会做这样的事情:

int pd[2];
int retValue;
char buffer[MAXBUF] = {0};
pipe(pd);
dup2(pd[1],1);
retValue = system("your command");
read(pd[0], buffer, MAXBUF);

现在,你有(输出的一部分)缓冲区中的输出和retValue中的返回码。

或者,您可以使用exec (即execve )中的函数,并通过waitwaitpid获取返回值。

更新:这将只重定向标准输出。 要重定向标准错误,请使用dup2(pd[1],1)


最简单的解决方案是使用system ,并将标准输出和标准错误重定向到临时文件,稍后您可以删除该文件。


不幸的是,Linux上的C没有简单简单的方法来做到这一点。 下面是一个示例,如何正确读取/写入子进程的stdout / stderr / stdin。

当你想要接收退出代码时,你必须使用waitpid (完整的例子在提供的页面底部提供):

endID = waitpid(childID, &status, WNOHANG|WUNTRACED);

现在你只需要将这两者结合在一起:)

另外还有一本名为Advanced Linux Programming(ALP)的免费书籍,其中包含有关这些类型问题的详细信息。

链接地址: http://www.djcxy.com/p/74851.html

上一篇: how to get linux command output string and output status in c++

下一篇: How to properly use system() to execute a command in C++?