#include #include #include #include #include struct dati { int parentesiAperte; int parentesiChiuse; int puntiVirgola; }; int main() { int pd[2]; pipe(pd); pid_t pid = fork(); if (pid < 0) { printf("Errore nella creazione del figlio, esplodi."); return 1; } // Processo figlio. if (pid == 0) { close(pd[0]); FILE *f; int pA = 0, pC = 0, pV = 0; if ((f = fopen("../File/ver.c", "r")) == NULL) { printf("Errore apertura file testo.txt"); return 1; } while (!feof(f)) { char c = fgetc(f); switch(c) { case '{': pA++; break; case '}': pC++; break; case ';': pV++; break; } } struct dati datiDaScrivere = { pA, pC, pV }; write(pd[1], &datiDaScrivere, sizeof(datiDaScrivere)); fclose(f); exit(0); } // Processo padre. if (pid > 0) { close(pd[1]); int status; wait(&status); if (WIFSIGNALED(status)) { printf("Errore nel figlio. muori."); return 1; } struct dati datiLetti; read(pd[0], &datiLetti, sizeof(datiLetti)); printf("Parentesi Aperte: %d\n", datiLetti.parentesiAperte); printf("Parentesi Chiuse: %d\n", datiLetti.parentesiChiuse); printf("Punti e virgole: %d\n", datiLetti.puntiVirgola); } return 0; }