-
Notifications
You must be signed in to change notification settings - Fork 2
/
initializer.c
42 lines (30 loc) · 1.21 KB
/
initializer.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
#include "headers.h"
int main()
{
key_t key_id;
union Semun semun;
int send_val, rec_val, shmid, producerQIndex, consumerQIndex, muxLock, full, empty;
key_id = ftok("keyfile", 66);
producerQIndex = shmget(key_id, sizeof(int), 0666 | IPC_CREAT);
key_id = ftok("keyfile", 67);
consumerQIndex = shmget(key_id, sizeof(int), 0666 | IPC_CREAT);
key_id = ftok("keyfile", 68);
shmid = shmget(key_id, BUFFER_SIZE * sizeof(int), 0666 | IPC_CREAT);
key_id = ftok("keyfile", 69);
muxLock = semget(key_id, 1, 0666 | IPC_CREAT);
key_id = ftok("keyfile", 70);
full = semget(key_id, 1, 0666 | IPC_CREAT);
key_id = ftok("keyfile", 71);
empty = semget(key_id, 1, 0666 | IPC_CREAT);
// check for any creation error
validate(CREATION, producerQIndex | consumerQIndex | shmid | muxLock | full | empty);
semun.val = 1;
validate(MUTEX_SEM_SET_VAL, semctl(muxLock, 0, SETVAL, semun));
semun.val = 0;
validate(FULL_SEM_SET_VAL, semctl(full, 0, SETVAL, semun));
semun.val = BUFFER_SIZE;
validate(EMPTY_SEM_SET_VAL, semctl(empty, 0, SETVAL, semun));
writeSharedMemory(consumerQIndex, 0, -1);
writeSharedMemory(producerQIndex, 0, -1);
return 0;
}