#include #include #include #include #include #include #include // Comando linux per contare il numero di caratteri in un file di testo grep -o ';' nome_file | wc -l struct statCar{ int nCaratteri; int nVocali; int nConsonanti; int nSpazi; int nParagrafi; int nPunteggiatura; }; int main(){ FILE *fp; pid_t pid, ppid; int num,status,numscritti=0; if((fp=fopen("dati.dat","w+"))==NULL){ printf("Errore apertura file"); return 1; } printf("Pid del programma/processo padre %d\n",getpid()); pid=fork(); if(pid<0) { printf("Errore sulla generazione del processo figlio"); return 1; } if(pid==0){ FILE *fpR; struct statCar stats={0,0,0,0,0,0}; char Suffisso,letto; if((fpR=fopen("testoDaAnalizzare.txt","r"))==NULL){ exit(1); } while(!feof(fpR)){ letto=fgetc(fpR); letto=tolower(letto); if((letto>96 && letto<123) || (letto>47 && letto<58) || (letto==',' || letto=='.' || letto==' ' || letto=='!' || letto=='?' || letto=='\n')) stats.nCaratteri++; switch(letto){ case '.': case ',': case '!': case '?':stats.nPunteggiatura++;break; case '\n':stats.nParagrafi++;break; case ' ':stats.nSpazi++;break; case 'a': case 'e': case 'i': case 'o': case 'u':stats.nVocali++;break; default :stats.nConsonanti++;break; } } if(stats.nCaratteri > 0 && letto != '\n') stats.nParagrafi++; // Count last paragraph if file doesn't end with newline char appo[50]; sprintf(appo, "H%dV%dC%dS%dR%dP%d", stats.nCaratteri, stats.nVocali, stats.nConsonanti, stats.nSpazi, stats.nParagrafi, stats.nPunteggiatura); fwrite(appo, sizeof(char),strlen(appo), fp ); exit(0); }else{ ppid=wait(&status); if(!WIFEXITED(status)){ printf("Il figlio ha fallito l'esecuzione\n"); return 1; } rewind(fp); char bufRead[50],bufNum[10]; int ris[6],iNum=0,i,j=0; fread(bufRead, sizeof(char), 50, fp); puts(bufRead); for(i=1;i<=strlen(bufRead);i++){ if(bufRead[i]>=48 && bufRead[i]<=57){ bufNum[iNum]=bufRead[i]; iNum++; }else{ bufNum[iNum]='\0'; ris[j]=atoi(bufNum); j++; iNum=0; bufNum[0]='\0'; } } for(i=0;i<6;i++) printf("ris[%d]=%d\n",i,ris[i]); printf("Caratteri: %d\nVocali: %d\nConsonanti: %d\nSpazi: %d\nParagrafi: %d\nPunteggiatura: %d\n", ris[0], ris[1], ris[2], ris[3], ris[4],ris[5]); } fclose(fp); }