这只是一个更大程序的一小部分,但我试图从 execvp 获取输出,我已经正确设置了 execvp dup2
,并将其引导到管道中。当涉及到使用 read 读取管道的全长时,我的问题就出现了,我不知道execvp
每次的输出有多大,因为它可能因输入而异。
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == 0) {
close(fd[0]);
dup2(fd[1], 1);
execvp(msg.v,(char *[]){msg.v,NULL});
} else if (pid > 0) {
close(fd[1]);
read(fd[0],msg.v,....);
}
我尝试了几种不同的读取大小,但要么不够,要么最后我得到随机垃圾空白其他方式去获得输出。
整个程序是服务器的一部分的更多无用信息。我正在制作服务器和客户端..启动服务器给客户端一个终端命令,它通过 INET 流将其发送到服务器,并将输出发送回客户端以显示所有没有 stdio 的输出。