Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
26.05.2014
Размер:
1.3 Кб
Скачать
#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);
}

Соседние файлы в папке lab22
  • #
    26.05.20141.3 Кб42318.c
  • #
    26.05.201412.14 Кб4a.out