DOC

Realizzare il seguente programma C che utilizzi le System Call di ---

By Diana Mitchell,2014-08-10 21:33
6 views 0
Realizzare il seguente programma C che utilizzi le System Call di ---

    Realizzare il seguente programma C che utilizzi le System Call di Linux. Un padre creerà 2 processi figli F1, F2 e 2 pipe che lo colleghino ai rispettivi figli e i figli creeranno i rispettivi figli N1 e N2 (e le pipe necessarie). Il padre leggerà un vettore di double da tastiera (0 escluso) e manderà tutti i numeri positivi al primo figlio e i negativi al secondo figlio. I 2 figli calcoleranno le rispettive somme e restituiranno i risultati finali ai rispettivi figli N1 e N2 che li eleveranno al cubo, e li restituiranno a F1 e F2 che li stamperanno.

#define N 10

int pdPos[2], pdNeg[2];

    int pdN1[2], pdN2[2];

    double v[N];

    int nf=0;

pipe(pdPos); pipe(pdNeg);

pid =fork(); // creo il primo figlio (nf=0)

    if (pid >0) // secondo figlio

     { nf=1; pid=fork(); }

switch (pid){

    case -1: …errore

    case 0: // i figli

     if (nf==0)

     { // codice figlio 1….}

     else

     { // codice figlio 2….}

     break;

    default: // codice padre…..

    }

// codice padre

    for (i=0;i<n;i++)

     scanf(“%lf”, &v[i]);

    for (i=0;i<n;i++)

     if(v[i]>0) //mando a F1

     write (pdPos [1],&v[i],sizeof(double));

     else // mando a F2

     write (pdNeg [1],&v[i],sizeof(double));

     tappo=0;

     write (pdPos[1],&tappo,sizeof(double));

     write (pdNeg[1],&tappo,sizeof(double));

     wait(&status); wait(&status);

    // codice figlio1 (analogo a figlio2) double num, sommaPos=0;

    int pdN1[2], pid1;

pipe (pdN1);

    pid1=fork();

    if (pid>0)

    { // F1

    read (pdPos[0],&num,sizeof(double)); while (num!=0)

    {

     sommaPos=sommaPos+num;

     read (pdPos[0],&num,sizeof(double)); }

    write (pdN1[1],sommaPos,sizeof(double)); wait(&status); read(pdN1,&numCubo,sizeof(double));

    printf (“Num al cubo= %lf\n”,numCubo);

    }

    else

    { // N1

    int ris, num;

    read (pdN1[0], &num,sizeof(double)); ris=num*num*num;

    write (pdN1[1],&ris,sizeof(double)); }

Report this document

For any questions or suggestions please email
cust-service@docsford.com