我正在使用execlp()在子进程上执行命令,并保存到管道中以供父进程读取,例如

int pipefd[2];
if (pipe(pipefd)) {
    perror("pipe");
    exit(127);
}
if(!fork()){
    close(pipefd[0]);
    dup2(pipefd[1], 1);
    close(pipefd[1]);
    execlp("ls", "ls", NULL);
} else {
    close(pipefd[1]);
    dup2(pipefd[0], 0);
    close(pipefd[0]);
    execlp("wc", "wc", NULL);
}


在某些情况下,父级不必执行任何操作,而只是在屏幕上打印出管道的内容,如何在屏幕上打印管道(由于未知的输出大小,可能不存储到变量中)。

最佳答案

我如何在[the]屏幕上打印[the]的内容


从管道中逐字节读取read(),然后按printf("%d\n", byte);直到管道为空,即直到read()返回0

如果可以确保只是文本通过管道,则不要将字节打印为int(如上所示,每行一个),而是使用char连续打印为printf("%c", byte);

10-08 11:56