Mam problem z implementacją potoków na łączu nienazwanym. Zacząłem od:
Kod: Zaznacz cały
ls -l | tail -4 | tail -2
Wypożyczyłem odpowiednią literaturę, postępuję według schematu, nie mam pojęcia co może być nie tak. Co robię źle?
http://wklej.org/id/867415/
Kod: Zaznacz cały
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int lacze_1[2];
int lacze_2[2];
pipe(lacze_1);
pipe(lacze_2);
pid_t x = fork();
if (x == 0)
{
dup2(lacze_1[1], STDOUT_FILENO);
close(lacze_1[0]);
execl("/bin/ls", "ls", "-l", "../UNIX", NULL);
}
else
{
waitpid(x, NULL, 0);
pid_t x2 = fork();
if(x2 == 0)
{
dup2(lacze_1[0], STDIN_FILENO);
close(lacze_1[1]);
dup2(lacze_2[1], STDOUT_FILENO);
close(lacze_2[0]);
char **adres = malloc(sizeof(char *)*10);
adres[0] = "tail";
adres[1] = "-4";
adres[2] = NULL;
execvp(adres[0], &adres[0]);
}
else
{
pid_t x3 = fork();
if(x3 == 0)
{
dup2(lacze_2[0], STDIN_FILENO);
close(lacze_2[1]);
char **trzeci = malloc(sizeof(char *)*10);
trzeci[0] = "tail";
trzeci[1] = "-2";
trzeci[2] = NULL;
execvp(trzeci[0], &trzeci[0]);
}
else
{
}
}
}
return 0;
}