Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tests/sys/mqueue/mqtest1.c
39483 views
1
2
#include <err.h>
3
#include <errno.h>
4
#include <fcntl.h>
5
#include <mqueue.h>
6
#include <signal.h>
7
#include <stdio.h>
8
9
#define MQNAME "/mytstqueue1"
10
11
int
12
main(void)
13
{
14
struct mq_attr attr, attr2;
15
struct sigevent sigev;
16
mqd_t mq;
17
int status;
18
19
attr.mq_maxmsg = 2;
20
attr.mq_msgsize = 100;
21
mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr);
22
if (mq == (mqd_t)-1)
23
err(1, "mq_open");
24
status = mq_unlink(MQNAME);
25
if (status)
26
err(1, "mq_unlink");
27
status = mq_getattr(mq, &attr2);
28
if (status)
29
err(1, "mq_getattr");
30
if (attr.mq_maxmsg != attr2.mq_maxmsg)
31
err(1, "mq_maxmsg changed");
32
if (attr.mq_msgsize != attr2.mq_msgsize)
33
err(1, "mq_msgsize changed");
34
35
sigev.sigev_notify = SIGEV_SIGNAL;
36
sigev.sigev_signo = SIGRTMIN;
37
status = mq_notify(mq, &sigev);
38
if (status)
39
err(1, "mq_notify");
40
status = mq_notify(mq, &sigev);
41
if (status == 0)
42
err(1, "mq_notify 2");
43
else if (errno != EBUSY)
44
err(1, "mq_notify 3");
45
status = mq_notify(mq, NULL);
46
if (status)
47
err(1, "mq_notify 4");
48
status = mq_close(mq);
49
if (status)
50
err(1, "mq_close");
51
return (0);
52
}
53
54