我的仅管道三通正在工作,这是什么问题?

时间:2019-11-14 21:13:35

标签: c linux posix

我在为叉子的孩子配管时遇到问题。 似乎只有三通。

我创建一个管道调用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;
    }
}

0 个答案:

没有答案