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

Swa*_*apG 6 c++ linux command

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

例如:命令:

rmdir abcd

命令输出字符串:

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

命令状态:

1(表示命令失败)

我尝试使用system()提供输出状态的Linux函数,以及popen()给出命令输出字符串的函数,但这两个函数都没有给我输出字符串和Linux命令的输出状态.

Pio*_*fer 7

输出字符串是标准输出或标准错误描述符(分别为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);
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以使用from exec(ie execve)中的函数并使用wait或获取返回值waitpid.

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