-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMessage_que.cpp
More file actions
55 lines (48 loc) · 1.28 KB
/
Copy pathMessage_que.cpp
File metadata and controls
55 lines (48 loc) · 1.28 KB
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
/*
Message queue implementation—Copyright (c) 2002 J. S. Gray
*/
#include "Message_que.h"
#include <cstdio>
// Message queue constructor.
Message_que::Message_que(const char the_key) {
ipckey = ftok(".", the_key);
msqid = -1;
}
// Remove the message queue (if this process created it)
void
Message_que::Remove() {
if (msgctl(msqid, IPC_RMID, (struct msqid_ds *) 0) == -1)
exit(5);
}
// Place a message in the message queue.
void
Message_que::Enque(void *msg, int msg_size) {
if (msgsnd(msqid, msg, msg_size, 0) == -1)
exit(3);
}
// Return a message from the message queue.
int
Message_que::Deque(void *msg, int msg_size, int msg_type) {
int n;
memset(msg, 0x0, msg_size); // clear space
if ((n = msgrcv(msqid, msg, msg_size, msg_type, IPC_NOWAIT)) == -1)
exit(4);
return n;
}
// True if message queue exists else false.
bool
Message_que::Exist(const char the_key) {
return (msgget(ipckey, 0) != -1);
}
// Generate a new message queue.
void
Message_que::Create() {
if ((msqid = msgget(ipckey, IPC_CREAT | 0660)) == -1)
exit(1);
}
// Acquire (gain access to) existing message queue.
void
Message_que::Acquire() {
if ((msqid = msgget(ipckey, 0)) == -1)
exit(2);
}