Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Dandu-se un fisier text, sa se creeze cate un proces fiu pentru fiecare litera din alfabet ('a', 'b', ... 'z'). Procesul corespunzator literei 'a' va cauta in acel fisier text toate cuvintele care incep cu litera 'a' si le va scrie intr-un fisier a.txt. De asemenea, acest proces ii va comunica procesului parinte numarul de cuvinte care incep cu litera 'a' din fisierul text. Procesul corespunzator literei 'b' va efectua aceeasi operatiune, doar ca el cauta toate cuvintele care incep cu 'b' si le va scrie in b.txt. La fel decurg lucrurile pentru toate celelalte procese fiu. In final, procesul parinte va afisa o statistica care sa cuprinda numarul de cuvinte care incep cu litera 'a', numarul de cuvinte care incep cu 'b', s.a.m.d. */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- int main(){
- int i,p[2],rd[2]={0,0};
- FILE* f;
- pipe(p);
- char numef[10],buffer[50];
- printf("Introduceti numele fisierului: ");
- scanf("%s",numef);
- //GENERAREA PROCESELOR
- for(i=1;i<=26;i++){
- if(fork()==0){
- close(p[0]);
- int aux[2];
- aux[0]=0;
- aux[1]=i;
- char a = 96 + i;
- f = fopen(numef,"r");
- while (fscanf(f,"%s",buffer)==1){
- //printf("%c %c \n",a,buffer[0]);
- if(buffer[0] == a){
- aux[0]++;
- }
- }
- //printf("%d %d\n",aux[1],aux[0]);
- write(p[1],aux,2*sizeof(int));
- exit(0);
- }
- }
- //ASTEAPTA DUPA PROCESE
- for(i=1;i<=26;i++){
- wait(0);
- }
- close(p[1]);
- for(i=1;i<=26;i++){
- read(p[0],rd,2*sizeof(int));
- //printf("%d %d\n",rd[1],rd[0]);
- if(rd[0]!=0)
- printf("Sunt %d cuvinte care incep cu litera %c \n",rd[0],rd[1]+96);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement