从C ++中的控制台输出读取

时间:2018-03-22 14:17:00

标签: c++ linux console

我正在尝试在Linux的“C ++”中创建一个软件,用于读取ldd控制台应用程序的控制台输出。我想知道系统的共享文件中是否有任何'.so'库,或者在控制台中纯粹读取此命令的输出。以下是命令输出的示例:

ldd ./echo
    linux-vdso.so.1 =>  (0x00007fffdd8da000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe95daf4000)
    /lib64/ld-linux-x86-64.so.2 (0x000055a6179a6000)

此命令打印依赖项列表以及具有二进制文件的位置。 我希望将此输出保存在变量或其他内容中以便稍后进行格式化。

1 个答案:

答案 0 :(得分:1)

为此,通常必须使用管道函数运行我们想要输出的程序:popen()

string data;
FILE * stream;
const int max_buffer = 256;
char buffer[max_buffer];

    stream = popen(cmd.c_str(), "r");
    if (stream) {
        while (!feof(stream)) {
            if (fgets(buffer, max_buffer, stream) != NULL) {
                data.append(buffer);
            }
        }
        pclose(stream);
    }
}

通过这种方式,您可以获得ldd的输出并随意执行任何操作。

您可能会发现其他有用的问题:

popen() writes output of command executed to cout