Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<unistd.h>
- #include<string.h>
- #include<stdlib.h>
- int a[20];
- int n,nrp;
- int s=0;
- void childProc(int readPipe, int writePipe) {
- int i=1, j, sum=0;
- read(readPipe, &i, sizeof(int));
- for(j=i*(n/nrp);j<(i+1)*(n/nrp);j++)
- if(j<n)
- sum=sum+a[j];
- write(writePipe,&sum, sizeof(int));
- exit(1);
- }
- void parentProc(int readPipe, int writePipe) {
- int rez,j,val;
- for(j=0;j<nrp;j++)
- {
- write(writePipe,&j,sizeof(int));
- }
- for(j=0;j<nrp;j++)
- {
- read(readPipe, &val, sizeof(int));
- s+=val;
- }
- wait(2000);
- }
- int main() {
- int firstPipe[2];
- int secondPipe[2];
- int pid=1,i,j;
- printf("n=");scanf("%d",&n);
- for(i=0;i<n;i++)
- {
- printf("a[%d]=",i);
- scanf("%d",&a[i]);
- }
- nrp=4;
- if (pipe(firstPipe)) {
- printf("Nu am putut crea conducta!\n");
- exit(-1);
- }
- if (pipe(secondPipe)) {
- printf("Nu am putut crea conducta!\n");
- exit(-1);
- }
- for(j=0;j<nrp;j++)
- {
- pid = fork();
- if (pid) {
- if (pid == -1) {
- printf("Nu am reusit crearea procesului copil.\n");
- exit(-1);
- }
- } else {
- childProc(firstPipe[0], secondPipe[1]);
- }
- }
- parentProc(secondPipe[0], firstPipe[1]);
- printf("suma: %d\n",s);
- wait(2000);
- printf("Procesul principal gata!\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement