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