C++ 为什么管道在使用valgrind--xmlfd时会产生混乱的代码
这是我的密码:C++ 为什么管道在使用valgrind--xmlfd时会产生混乱的代码,c++,encoding,valgrind,C++,Encoding,Valgrind,这是我的密码: 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(
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;
这里是,我得到了混乱的代码,比如
我找到了解决方案,这是因为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);
}
int main(int argc,char**argv){
int-fd[2];
管道(fd);
fd[0];
fd[1];
std::string cmd=“valgrind--leak check=yes--track origins=yes--xml=yes--xml fd=”;
cmd+=std::to_字符串(fd[1]);
cmd+=“/tmp/home/rorooco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2”;
系统(cmd.c_str());
关闭(fd[1]);
int n=4096;
字符缓冲区[n];
std::字符串r;
while(读取(fd[0],缓冲区,n)!=0){
r+=缓冲区;
}
关闭(fd[0]);
标准::cout
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);
}