我在为叉子的孩子配管时遇到问题。 似乎只有三通。
我创建一个管道调用execvp并进行fork 数据通过管道传递给孩子。
与tee一起使用可引发EPIPE错误。 点击下面的“丢失的连接”。
作品 当app_argv设置为 tee /home/projects/teeout.wav |猫> /home/projects/catout.wav
不起作用 当app_argv设置为 猫|发球/home/projects/teeout.wav
问题是什么,因为以上两个都应从stdin收集? 那有什么区别呢?
pid = fork();
if (pid == 0)
{
// Child
dup2(pipefd[0], STDIN_FILENO);
execvp(app, app_argv);
exit(1);
}
....
int result = write(pipefd[1], data, datalen);
if (result < 0) {
if (errno == EPIPE) {
LOG("lost connection\n");
close(pipefd[1]);
pipefd[1] = -1;
}
}