7 #include <sys/select.h>
9 #define MQNAME "/mytstqueue3"
13 void sighandler(int sig)
15 write(1, "timeout\n", 8);
30 attr.mq_msgsize = 128;
31 mq = mq_open(MQNAME, O_CREAT | O_RDWR | O_EXCL, 0666, &attr);
34 status = mq_getattr(mq, &attr);
36 err(1, "mq_getattr()");
39 if (pid == 0) { /* child */
45 signal(SIGALRM, sighandler);
47 mq = mq_open(MQNAME, O_RDWR);
49 err(1, "child process: mq_open");
50 buf = malloc(attr.mq_msgsize);
51 for (j = 0; j < LOOPS; ++j) {
53 FD_SET(__mq_oshandle(mq), &set);
55 status = select(__mq_oshandle(mq)+1, &set, NULL, NULL, NULL);
57 err(1, "child process: select()");
58 status = mq_receive(mq, buf, attr.mq_msgsize, &prio);
60 err(2, "child process: mq_receive");
61 for (i = 0; i < attr.mq_msgsize; ++i)
63 err(3, "message data corrupted");
65 err(4, "priority is incorrect: %d", prio);
71 } else if (pid == -1) {
77 signal(SIGALRM, sighandler);
78 buf = malloc(attr.mq_msgsize);
79 for (j = 0; j < LOOPS; ++j) {
80 for (i = 0; i < attr.mq_msgsize; ++i) {
85 FD_SET(__mq_oshandle(mq), &set);
86 status = select(__mq_oshandle(mq)+1, NULL, &set, NULL, NULL);
89 status = mq_send(mq, buf, attr.mq_msgsize, PRIO);
99 status = mq_close(mq);