Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- pid_t pid1, pid2;
- int p[2], q[2], r[2], t[2];
- int main()
- {
- char c;
- if(-1 == pipe(p))
- {
- printf("Eroare la primul pipe");
- exit(2);
- }
- if(-1 == pipe(q))
- {
- printf("Eroare la al doilea pipe");
- exit(2);
- }
- if(-1 == pipe(r))
- {
- printf("Eroare la al treilea pipe");
- exit(2);
- }
- if(-1 == pipe(t))
- {
- printf("Eroare la al patrulea pipe");
- exit(2);
- }
- if(-1 == (pid1 = fork()))
- {
- printf("Eroare la primul fork().");
- exit(1);
- }
- if(pid1)
- {
- if(-1 == (pid2 = fork()))
- {
- printf("Eroare la al doilea fork().");
- exit(1);
- }
- }
- if(pid1 && pid2)
- {
- // Doar tatal
- // Vom presupune ca in loc de CTRL + D facem pana la citirea lui zero (care nu e nici pozitiv nici negativ)
- close(p[0]);
- close(q[0]);
- close(r[1]);
- close(t[1]);
- int nr;
- do
- {
- scanf("%d", &nr);
- if(nr == 0) break;
- if(nr > 0)
- {
- write(p[1], &nr, sizeof(nr));
- }
- else
- {
- write(q[1], &nr, sizeof(nr));
- }
- nr = 0;
- } while(1);
- close(p[1]);
- close(q[1]);
- int s1, s2;
- wait(NULL);
- wait(NULL);
- read(r[0], &s1, sizeof(nr));
- read(t[0], &s2, sizeof(nr));
- close(r[0]);
- close(t[0]);
- printf("Sunt procesul tata cu pid = %d si suma totala este: %d\n", getpid(), s1 + s2);
- }
- if(!pid1)
- {
- close(q[0]);
- close(q[1]);
- close(p[1]);
- close(r[0]);
- close(t[0]);
- close(t[1]);
- int nr, s = 0;
- while(read(p[0], &nr, sizeof(nr)))
- {
- printf("Fiul 1: %d\n", nr);
- s += nr;
- }
- close(p[0]);
- printf("Sunt fiul 1 cu pid %d si am suma: %d\n", getpid(), s);
- write(r[1], &s, sizeof(s));
- close(r[1]);
- }
- if(pid1 && !pid2)
- {
- close(p[0]);
- close(p[1]);
- close(q[1]);
- close(t[0]);
- close(r[0]);
- close(r[1]);
- int nr, s = 0;
- while(read(q[0], &nr, sizeof(nr)))
- {
- printf("Fiul 2: %d\n", nr);
- s += nr;
- }
- close(q[0]);
- printf("Sunt fiul 2 cu pid = %d si am suma: %d\n", getpid(), s);
- write(t[1], &s, sizeof(s));
- close(t[1]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement