#include #include #include #include #include struct dati { int parentesiAperte; int parentesiChiuse; int puntiVirgola; }; int main() { FILE *fp; if ((fp = fopen("dati.dat", "w+")) == NULL) { printf("Errore apertura file dati.dat"); return 1; } pid_t pid = fork(); if (pid < 0) { printf("Errore nella creazione del figlio, esplodi."); return 1; } // Processo figlio. if (pid == 0) { FILE *f; int pA = 0, pC = 0, pV = 0; if ((f = fopen("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 }; fwrite(&datiDaScrivere, sizeof(datiDaScrivere), 1, fp); fclose(f); exit(0); } // Processo padre. if (pid > 0) { int status; wait(&status); if (WIFSIGNALED(status)) { printf("Errore nel figlio. muori."); return 1; } rewind(fp); struct dati datiLetti; fread(&datiLetti, sizeof(datiLetti), 1, fp); printf("Parentesi Aperte: %d\n", datiLetti.parentesiAperte); printf("Parentesi Chiuse: %d\n", datiLetti.parentesiChiuse); printf("Punti e virgole: %d\n", datiLetti.puntiVirgola); } return 0; }