/* Soluzione della parte C del compito del 13 Luglio 2022 */ #include #include #include #include #include #include #include #include typedef int pipe_t[2]; int main (int argc, char **argv) { int Q; /* numero di file/processi */ /* ATTENZIONE NOME Q imposto dal testo! */ int pid; /* pid per fork */ pipe_t *pipes; /* array di Q+1 pipe usate a ring da primo figlio, a secondo figlio .... ultimo figlio e poi padre e quindi di nuovo da primo figlio: ogni processo legge dalla pipe q e scrive sulla pipe q+1; il padre legge da pipe Q e scrive su pipe 0! */ int q,j; /* indici */ /* ATTENZIONE NOME q imposto dal testo! */ int fd; /* file descriptor */ int pidFiglio, status, ritorno; /* per valore di ritorno figli */ char ch; /* carattere lette dai figli dall'unico file */ int nrChar; /* contatore carattere cercato per ogni linea */ char ok; /* carattere letto dai figli dalla pipe precedente e scritta su quella successiva */ int nr,nw; /* variabili per salvare valori di ritorno di read/write da/su pipe */ int L; /* per valore numero linee del file */ /* ATTENZIONE NOME L imposto dal testo! */ /* controllo sul numero di parametri almeno 1 file, una lunghezza e 2 caratteri */ if (argc < 5) { printf("Errore numero di parametri dato che argc = %d\n", argc); exit(1); } /* ricaviamo il numero di linee del file e controlliamo che sia strettamente maggiore di 0 */ L = atoi(argv[2]); if (L <= 0) { printf("Errore %d non numero intero strettamente positivo\n", L); exit(2); } /* controlliamo che i parametri a partire dal terzo siano singoli parametri */ for (j=3; j> 8) & 0xFF); printf("Il figlio con pid=%d ha ritornato %d (se 255 problemi)\n", pidFiglio, ritorno); } } exit(0); }