Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rdemeter
GitHub Repository: rdemeter/so
Path: blob/master/lab5/server_mq.c
224 views
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<errno.h>
4
#include<sys/stat.h>
5
#include<sys/types.h>
6
#include<mqueue.h>
7
#include<string.h>
8
9
#define QUEUE_NAME "/my_queue3"
10
#define NUMBER 1337
11
#define MAX_SIZE 1024
12
#define MSG_END "done"
13
/*descriptorul cozii de mesaje*/
14
mqd_t q;
15
int main(int argc, char **argv)
16
{
17
struct mq_attr attr;
18
char buf[MAX_SIZE + 1];
19
int done = 0;
20
attr.mq_flags = 0; /* blocking */
21
attr.mq_maxmsg = 10;
22
attr.mq_msgsize = MAX_SIZE;
23
attr.mq_curmsgs = 0;
24
q = mq_open(QUEUE_NAME, O_CREAT | O_RDONLY, 0644, &attr);
25
if (q < 0) {
26
perror("open():");
27
exit(-1);
28
}
29
do {
30
ssize_t bytes_read;
31
if ((bytes_read = mq_receive(q, buf, MAX_SIZE + 1, NULL)) < 0) {
32
perror("receive():");
33
exit(-1);
34
}
35
buf[bytes_read] = 0;
36
if (!strcmp(buf, MSG_END)) done = 1;
37
printf("Am primit de la client: %s (done = %d)\n", buf, done);
38
} while (!done);
39
40
if (mq_close(q) < 0) {
41
perror("close():");
42
exit(-1);
43
}
44
45
if (mq_unlink(QUEUE_NAME) < 0) {
46
perror("unlink():");
47
exit(-1);
48
}
49
return 0;
50
}
51
52
53