Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. /*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. */
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/types.h>
  8. #include <sys/wait.h>
  9.  
  10.  
  11. int main(){
  12.     int i,p[2],rd[2]={0,0};
  13.     FILE* f;
  14.     pipe(p);
  15.     char numef[10],buffer[50];
  16.     printf("Introduceti numele fisierului: ");
  17.     scanf("%s",numef);
  18.  
  19.     //GENERAREA PROCESELOR
  20.     for(i=1;i<=26;i++){
  21.         if(fork()==0){
  22.             close(p[0]);
  23.             int aux[2];
  24.             aux[0]=0;
  25.             aux[1]=i;
  26.             char a = 96 + i;
  27.             f = fopen(numef,"r");
  28.             while (fscanf(f,"%s",buffer)==1){
  29.                 //printf("%c %c \n",a,buffer[0]);
  30.                 if(buffer[0] == a){
  31.                     aux[0]++;
  32.                 }
  33.             }
  34.             //printf("%d %d\n",aux[1],aux[0]);
  35.             write(p[1],aux,2*sizeof(int));
  36.             exit(0);
  37.         }
  38.     }
  39.     //ASTEAPTA DUPA PROCESE
  40.     for(i=1;i<=26;i++){
  41.          wait(0);
  42.     }
  43.     close(p[1]);
  44.     for(i=1;i<=26;i++){
  45.         read(p[0],rd,2*sizeof(int));
  46.         //printf("%d %d\n",rd[1],rd[0]);
  47.         if(rd[0]!=0)
  48.             printf("Sunt %d cuvinte care incep cu litera %c \n",rd[0],rd[1]+96);
  49.     }
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement