如何在c ++中获得linux命令的输出字符串和输出状态
我想在C ++程序中获得Linux命令的输出字符串以及命令输出状态。 我正在执行我的应用程序中的Linux命令。
例如:命令:
rmdir abcd
命令输出字符串:
rmdir:无法删除`abcd':没有这样的文件或目录
命令状态:
1(表示命令失败)
我尝试使用Linux函数system()
,它给出了输出状态,函数popen()
给出了一个命令的输出字符串,但是这两个函数都没有给出Linux命令的输出字符串和输出状态。
输出字符串是标准输出或标准错误描述符(分别为1或2)。
你必须重定向这些流(看看dup
和dup2
函数)到一个可以读取它们的地方(例如 - 一个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
)中的函数,并通过wait
或waitpid
获取返回值。
更新:这将只重定向标准输出。 要重定向标准错误,请使用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++?