Добрый день, не понимаю как правильно должен работать конвейер если больше 2 аргументов, а точнее как заставить новую функцию читать из старого pipe. wc ругается что нет ничего на входе. P.S. Потом буду это все в цикл переделывать, но пока что пытаюсь понять как это должно работать.
 
int main(int ac, char **av, char **env)
{
    // int fw=open("chinaisbetter.txt", O_APPEND|O_WRONLY);
    char *argv[2];
    char *argv2[3];
    char *argv3[2];
    pid_t   pid;
    pid_t   pid2;
    pid_t   pid3;
    int p[2];
    int t[2];
    int status;
    argv[0] = "ls";
    argv[1] = 0;
    argv2[0] = "cat";
    argv2[1] = "-e";
    argv2[2] = 0;
    argv3[0] = "wc";
    argv3[1] = 0;
    pipe(p);
    pid = fork();
    // printf("pid = %d\n", pid);
    if (pid == 0)
    {
        dup2(p[1], 1);
        close(p[0]);
        close(p[1]);
        execve("/bin/ls", argv, env);
        exit(0);
        close(p[1]);
    }
    else if (pid == -1)
    {
        printf("ERROR1\n");
        exit(1);
    }
    else
        close(p[1]);
    pipe(t);
    pid2 = fork();
    // printf("pid2 = %d\n", pid2);
    if (pid2 == 0)
    {
        dup2(p[0], 0);
        dup2(t[1], 1);
        close(p[0]);
        close(p[1]);
        close(t[0]);
        close(t[1]);
        execve("/bin/cat", argv2, env);
        exit(0);
    }
    else if (pid2 == -1)
    {
        printf("ERROR2\n");
        exit(1);
    }
    else
    {
        close(p[0]);
        close(t[0]);
        close(t[1]);
    }
    pid3 = fork();
    printf("*pid3 = %d*\n", pid3);
    if (pid3 == 0)
    {
        dup2(t[0], 0);
        close(t[0]);
        execve("/usr/bin/wc", argv3, env);
        exit(0);
    }
    else if (pid3 == -1)
    {
        printf("ERROR3\n");
        exit(1);
    }
    waitpid(-1, &status, 0);
    waitpid(-1, &status, 0);
    waitpid(-1, &status, 0);
    printf("end\n");
    return (0);
}
