这是我的代码:
int fd[2];
pipe(fd);
fd[0];
fd[1];
std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
cmd += std::to_string(fd[1]);
cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
system(cmd.c_str());
close(fd[1]);
int n = 1024;
char buffer[1024];
std::string r;
while (read(fd[0], buffer, n) != 0) {
r += buffer;
}
std::cout << r << std::endl;
可执行文件“ex2”代码是:
int *is;
is[2] = 2;
return (0);
这里是output,我得到像<\360\034@
更新
当我使用--xml-file时,它输出普通文本,如this
答案 0 :(得分:0)
我找到了解决方案,因为int n = 1024
很慢,以下代码可以正常工作:
int main(int argc, char **argv) {
int fd[2];
pipe(fd);
fd[0];
fd[1];
std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
cmd += std::to_string(fd[1]);
cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
system(cmd.c_str());
close(fd[1]);
int n = 4096;
char buffer[n];
std::string r;
while (read(fd[0], buffer, n) != 0) {
r += buffer;
}
close(fd[0]);
std::cout << r << std::endl;
return (0);
}
但我不知道为什么它是4096?为什么它不是2048,1024,如何确定这个值?如果有人知道,请更改此答案