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