7 #include <sys/select.h>
10 #define MQNAME "/mytstqueue4"
14 void sighandler(int sig
)
16 write(1, "timeout\n", 8);
33 attr
.mq_msgsize
= 128;
34 mq
= mq_open(MQNAME
, O_CREAT
| O_RDWR
| O_EXCL
, 0666, &attr
);
37 status
= mq_getattr(mq
, &attr
);
39 err(1, "mq_getattr()");
41 if (pid
== 0) { /* child */
47 mq
= mq_open(MQNAME
, O_RDWR
);
49 err(1, "child: mq_open");
50 EV_SET(&kev
, __mq_oshandle(mq
), EVFILT_READ
, EV_ADD
, 0, 0, 0);
51 status
= kevent(kq
, &kev
, 1, NULL
, 0, NULL
);
53 err(1, "child: kevent");
54 buf
= malloc(attr
.mq_msgsize
);
55 for (j
= 0; j
< LOOPS
; ++j
) {
57 status
= kevent(kq
, NULL
, 0, &kev
, 1, NULL
);
59 err(1, "child: kevent 2");
60 status
= mq_receive(mq
, buf
, attr
.mq_msgsize
, &prio
);
62 err(2, "child: mq_receive");
63 for (i
= 0; i
< attr
.mq_msgsize
; ++i
)
65 err(3, "child: message data corrupted");
67 err(4, "child: priority is incorrect: %d",
74 } else if (pid
== -1) {
80 signal(SIGALRM
, sighandler
);
82 EV_SET(&kev
, __mq_oshandle(mq
), EVFILT_WRITE
, EV_ADD
, 0, 0, 0);
83 status
= kevent(kq
, &kev
, 1, NULL
, 0, NULL
);
86 buf
= malloc(attr
.mq_msgsize
);
87 for (j
= 0; j
< LOOPS
; ++j
) {
88 for (i
= 0; i
< attr
.mq_msgsize
; ++i
) {
92 status
= kevent(kq
, NULL
, 0, &kev
, 1, NULL
);
94 err(1, "child: kevent 2");
95 status
= mq_send(mq
, buf
, attr
.mq_msgsize
, PRIO
);
105 status
= mq_close(mq
);