Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабораторки по ОС препод Челноков / 2семестр / wi2 / olesha / 2318
.c#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
main(){
int fd1[2];
int fd2[2];
int fd3[2];
int fd4[2];
pid_t ccpid;
pid_t cpid1;
pid_t cpid2;
pid_t cppid;
ssize_t nread;
char buffer[BUFSIZ];
char pr1[256];
char pr2[256];
char pr3[256];
char pr4[256];
printf("\npr1: ");
scanf("%s", pr1);
printf("\npr2: ");
scanf("%s", pr2);
printf("\npr3: ");
scanf("%s", pr3);
printf("\npr4: ");
scanf("%s", pr4);
pipe(fd4);
cppid = fork();
if(cppid == (pid_t) 0){
close(fd4[1]);
dup2(fd4[0], STDIN_FILENO);
execlp(pr4, pr4, NULL);
}
pipe(fd2);
cpid1 = fork();
if(cpid1 == (pid_t) 0){
pipe(fd1);
ccpid = fork();
if(ccpid == (pid_t) 0){
close(fd1[0]);
dup2(fd1[1], STDOUT_FILENO);
execlp(pr1, pr1, NULL);
}
close(fd1[1]);
close(fd2[0]);
dup2(fd1[0], STDIN_FILENO);
dup2(fd2[1], STDOUT_FILENO);
execlp(pr2, pr2, NULL);
}
close(fd2[1]);
pipe(fd3);
cpid2 =fork();
if(cpid2 == (pid_t) 0){
close(fd3[0]);
dup2(fd3[1], STDOUT_FILENO);
execlp(pr3, pr3, NULL);
}
close(fd3[1]);
while((nread = read(fd2[0], buffer, BUFSIZ)) > 0)
write(fd4[1], buffer, nread);
while((nread = read(fd3[0], buffer, BUFSIZ)) > 0)
write(fd4[1], buffer, nread);
exit(0);
}