Добрый день, не понимаю как правильно должен работать конвейер если больше 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);
}