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

    [C] Comunicazione tra processi: fork() e pipe() || HELP !!!

    Sto cercando da stamattina di risolvere questo enigma!!
    E' un esercizio d'esame. Bisogna completare il codice doce compare la scritta CODICE MANCANTE !!! Il resto non si deve modificare. Vi prego aiutatemi a capire

    Il programma seguente gestisce la comunicazione tramite pipe tra un processo padre e due processi figli (figlio pari e figlio dispari). Il processo padre legge numeri positivi da tastiera fino a che non viene inserito un numero negativo. Se il numero è pari, lo manda al figlio pari, altrimenti lo manda al figlio dispari. I processi figli tengono traccia delle somme parziali. All’inserimento di un numero negativo, il processo padre raccoglie le somme parziali dai processi figli e le stampa a video assieme al totale. Completare le due parti di codice mancanti.
    NOTA: non è richiesta la gestione dei segnali.


    main(){
    int pipe_pari[2], pipe_dispari[2], canale[2];
    int somma=0;
    int numero, pid, status;
    // creo il primo processo figlio (il pari)
    if (pipe(canale)==-1) {printf ("errore\n"); exit(-1);}
    pid=fork();
    if(pid>0){
    // codice eseguito solo dal processo padre.
    pipe_pari[0]=canale[0];
    pipe_pari[1]=canale[1];
    if (pipe(canale)==-1) {printf ("errore\n"); exit(-1);}
    //Creo il secondo figlio (il dispari)
    pid=fork();
    if(pid>0) {
    // codice eseguito solo dal processo padre.
    pipe_dispari[0]=canale[0];
    pipe_dispari[1]=canale[1];
    }
    }
    if (pid==0) {
    close(pipe_pari[0]);
    close(pipe_pari[1]);
    close(pipe_dispari[0]);
    close(pipe_dispari[1]);
    //Completare qui il codice
    } else {
    close(canale[0]);
    close(canale[1]);
    printf("scrivi dei numeri (negativo per uscire)\n");
    scanf("%d",&numero);
    //Completare qui il codice
    }
    exit(0);
    }

    HELP PER FAVORE

  2. #2

    Re: [C] Comunicazione tra processi: fork() e pipe() || HELP !!!

    codice:
    int main(void){
    
       int pipe_pari[2], pipe_dispari[2], canale[2];
       int somma=0;
       int numero, pid, status;
       
       /* creo il primo processo figlio (il pari) */
       if (pipe(canale) == -1) {
          
          printf ("errore\n");
          exit(-1);
          
       }
       
       pid=fork();
       if(pid>0){
          
          /* codice eseguito solo dal processo padre. */
          pipe_pari[0]=canale[0];
          pipe_pari[1]=canale[1];
          
          if (pipe(canale)==-1) {
             
             printf ("errore\n");
             exit(-1);
    
          }
          /*Creo il secondo figlio (il dispari)*/
          pid=fork();
          if(pid>0) {
             /* codice eseguito solo dal processo padre. */
             pipe_dispari[0]=canale[0];
             pipe_dispari[1]=canale[1];
          }
          
       }
       
       if (pid==0) {
          
         close(pipe_pari[0]);
         close(pipe_pari[1]);
         close(pipe_dispari[0]);
         close(pipe_dispari[1]);
         /*Completare qui il codice*/
           
       } else {
          
          close(canale[0]);
          close(canale[1]);
          printf("scrivi dei numeri (negativo per uscire)\n");
          scanf("%d",&numero);
          /*Completare qui il codice*/ 
       }
    
       return 0;
       
    }
    Ho indentato e aggiunto i tag CODE (USALI !!!).


  3. #3

    ok

    Ora è pulito grazie !!!
    Nel copia incolla non mi ha mantenuto gli spazi ( come era ovvio del resto :P )!
    Una mano per favore??? Nessuno nessuno ??

    UP UP UP

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Non hai letto il regolamento, specialmente la parte riguardante i titoli.
    Non hai detto quali sono le difficoltà che incontri (sembra che tu chieda che l'esercizio ti venga svolto da altri)
    Non hai usato i tag CODE per il codice (lo ha fatto per te menphisx).

    Correggo il titolo e ti invito a leggere il regolamento. Tengo aperta la discussione, per ora.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5

    risolto

    RISOLTO FINALMENTE !!!!
    non avevo chiuso per bene le pipe e andava quindi in DeadLock VVoVe: !
    Grazie cmq

    edit:

    hai ragione scusa, ho postato senza leggere nulla! Ero andato nel panico visto l'imminente data d'esame! Perdonatemi! (viva la sincerità )

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 © 2024 vBulletin Solutions, Inc. All rights reserved.