Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] creare figli e connetterli con delle pipe

    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!
    GdR Online - http://lenar.it/
    Yesterday is history. Tomorrow is mystery.
    Today is a gift. That's why it's called the present

  2. #2
    penso che ti serva questo =)



    codice:
    /*
     * 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);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.