-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
88 lines (81 loc) · 1.82 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include "clockLibrary/Lamport/LamportClock.h"
#include "clockLibrary/Vector/VectorClock.h"
void LamportCaller(){
int a_and_b[2];
int b_and_a[2];
int b_and_c[2];
int c_and_b[2];
pipe(a_and_b);
pipe(b_and_a);
pipe(b_and_c);
pipe(c_and_b);
pid_t processa = fork();
if(processa){
// if fork returns 0 process created
close(a_and_b[0]);
process_a(a_and_b);
}
pid_t processb=fork();
if(processb){
close(b_and_a[0]);
close(b_and_c[0]);
close(b_and_c[1]);
process_b(b_and_a, b_and_c);
}
pid_t processc=fork();
if(processc){
close(c_and_b[1]);
process_c(c_and_b);
}
close(a_and_b[0]);
close(b_and_a[1]);
close(b_and_c[0]);
close(c_and_b[0]);
close(c_and_b[1]);
waitpid(processa,NULL,0);
waitpid(processb,NULL,0);
waitpid(processc,NULL,0);
}
void VectorCaller(){
int a_and_b[2];
int b_and_a[2];
int b_and_c[2];
int c_and_b[2];
pipe(a_and_b);
pipe(b_and_a);
pipe(b_and_c);
pipe(c_and_b);
pid_t processa = fork();
if(processa){
// if fork returns 0 process created
close(a_and_b[0]);
vector_process_a(a_and_b);
}
pid_t processb=fork();
if(processb){
close(b_and_a[0]);
close(b_and_c[0]);
// close(b_and_c[1]);
vector_process_b(b_and_a, b_and_c);
}
pid_t processc=fork();
if(processc){
close(c_and_b[1]);
vector_process_c(c_and_b);
}
close(a_and_b[0]);
close(b_and_a[1]);
close(b_and_c[0]);
close(c_and_b[0]);
close(c_and_b[1]);
waitpid(processa,NULL,0);
waitpid(processb,NULL,0);
waitpid(processc,NULL,0);
}
int main() {
LamportCaller();
VectorCaller();
}