7 #include <sys/select.h>
9 #define MQNAME "/mytstqueue3"
13 void sighandler(int sig)
15 write(1, "timeout\n", 8);
29 attr.mq_msgsize = 128;
30 mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr);
33 status = mq_getattr(mq, &attr);
35 err(1, "mq_getattr()");
38 if (pid == 0) { /* child */
44 signal(SIGALRM, sighandler);
46 mq = mq_open(MQNAME, O_RDWR);
48 err(1, "child process: mq_open");
49 buf = malloc(attr.mq_msgsize);
50 for (j = 0; j < LOOPS; ++j) {
54 status = select(mq+1, &set, NULL, NULL, NULL);
56 err(1, "child process: select()");
57 status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
59 err(2, "child process: mq_receive");
60 for (i = 0; i < attr.mq_msgsize; ++i)
62 err(3, "message data corrupted");
64 err(4, "priority is incorrect: %d", prio);
70 } else if (pid == -1) {
76 signal(SIGALRM, sighandler);
77 buf = malloc(attr.mq_msgsize);
78 for (j = 0; j < LOOPS; ++j) {
79 for (i = 0; i < attr.mq_msgsize; ++i) {
85 status = select(mq+1, NULL, &set, NULL, NULL);
88 status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
98 status = mq_close(mq);