我正在尝试在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)
此命令打印依赖项列表以及具有二进制文件的位置。 我希望将此输出保存在变量或其他内容中以便稍后进行格式化。
答案 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的输出并随意执行任何操作。
您可能会发现其他有用的问题: