PDA

Visualizza la versione completa : [C] creare figli e connetterli con delle pipe


Vre
10-11-2010, 18:21
Ciao a tutti! Ho provato a cercare ma non ho trovato nulla..
Devo creare 3 figli da un processo padre e collegarli con delle pipe..


figlio 1 --------> figlio 2 --------> figlio 3

Riesco a collegare padre e figli ma non i figli tra di loro...come posso fare?

Grazie!

auron1986
10-11-2010, 18:58
penso che ti serva questo =)




/*
* Esercizio: scrivere un programma che esegua il comando di shell ls| sort| grep<pat>
* con tre processi distinti.
*/

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include<errno.h>

#define READ 0
#define WRITE 1
//AVENDO DEFINITO LE pipe ALL' INIZIO OGNI PROCESSO ANCHE SE NN LE UTILIZZA DEVE CHIUDERLE

int main(int argc, char *argv[])
{

pid_t pid_0, pid_1, pid_2;
int fd[2], fd2[2];
pipe(fd); // CREO UNA PIPE TRA PID0 e PID1
pipe(fd2); // CREO UNA PIPE TRA PID1 e PID2

if (pid_0 = fork() == 0) { // Creo pid 0 fa "LS"
close(fd2[READ]);
close(fd2[WRITE]);
close(fd[READ]);
dup2(fd[WRITE], 1);
close(fd[WRITE]);
execlp("ls", "ls", NULL);
}

if (pid_1 = fork() == 0) { // Creo pid 1 fa "SORT"
close(fd[WRITE]);
dup2(fd[READ], 0);
close(fd[READ]);
close(fd2[READ]);
dup2(fd2[WRITE], 1);
close(fd2[WRITE]);
execlp("sort", "sort", NULL);
}

if (pid_2 = fork() == 0) { // Creo pid 2 fa "Grep"
close(fd[READ]);
close(fd[WRITE]);
close(fd2[WRITE]);
dup2(fd2[READ], 0);
close(fd2[READ]);
execlp("grep", "grep", argv[1], NULL);
}
close(fd[READ]);
close(fd2[READ]);
close(fd[WRITE]);
close(fd2[WRITE]);
printf("Programma terminato con successo\n");
exit(0);
}

Loading