📄 testmq.c
字号:
#include "unpipc.h"#include "mqueue.h"#define BUFFLEN 100char msg[BUFFLEN]; /* receive buffer */char msg0[] = "";char msg1[] = "1";char msg2[] = "22";char msg3[] = "333";char msg4[] = "4444";char msg5[] = "55555";char msg6[] = "666666";char msg7[] = "7777777";char msg8[] = "88888888";static void sig_alrm(int);static void sig_usr1(int);int blocked, sigusr1;intmain(int argc, char **argv){ int rc; pid_t childpid; mymqd_t mqd; unsigned int prio; struct sigevent sigev; struct mymq_attr attr, info; if (argc != 2) err_quit("usage: testmymq <pathname>"); /***************************************************************/ /* test mq_unlink() error return */ mymq_unlink(argv[1]); if ( ( rc = mymq_unlink(argv[1])) == 0 || errno != ENOENT) err_sys("mq_unlink returned %d", rc); /***************************************************************/ /* create a queue with default attributes */ mqd = Mymq_open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE, NULL); Mymq_getattr(mqd, &info); if (info.mq_maxmsg != 128 || info.mq_msgsize != 1024 || info.mq_flags != 0 || info.mq_curmsgs != 0) err_msg("message queue defaults:\n" "maxmsg = %ld, msgsize = %ld, flags = %ld, curmsgs = %ld", info.mq_maxmsg, info.mq_msgsize, info.mq_flags, info.mq_curmsgs); Mymq_close(mqd); /***************************************************************/ /* check O_EXCL */ mqd = mymq_open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE, NULL); if (mqd != (mqd_t) -1 || errno != EEXIST) err_sys("mq_open returned %d", rc); Mymq_unlink(argv[1]); /***************************************************************/ /* create with attributes */ attr.mq_maxmsg = 4; attr.mq_msgsize = 7; mqd = Mymq_open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE, &attr); Mymq_getattr(mqd, &info); if (info.mq_maxmsg != 4 || info.mq_msgsize != 7 || info.mq_flags != 0 || info.mq_curmsgs != 0) err_quit("1: maxmsg = %ld, msgsize = %ld, flags = %ld, curmsgs = %ld\n", info.mq_maxmsg, info.mq_msgsize, info.mq_flags, info.mq_curmsgs); /***************************************************************/ /* send/receive 1 message */ Mymq_send(mqd, msg1, 1, 1); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc); if (prio != 1) err_quit("mq_receive returned prio %d, expected 1", prio); /* send/receive 1 0-byte message */ Mymq_send(mqd, msg0, 0, 0); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 0) err_quit("mq_receive returned %d, expected 0", rc); if (prio != 0) err_quit("mq_receive returned prio %d, expected 0", prio); /* send 2 messages/receive in reverse order */ Mymq_send(mqd, msg1, 1, 1); Mymq_send(mqd, msg2, 2, 2); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc); if (prio != 1) err_quit("mq_receive returned prio %d, expected 1", prio); /* send 3 messages/receive in reverse order */ Mymq_send(mqd, msg1, 1, 1); Mymq_send(mqd, msg2, 2, 2); Mymq_send(mqd, msg3, 3, 3); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc); if (prio != 1) err_quit("mq_receive returned prio %d, expected 1", prio); /* send 4 messages/receive in reverse order */ Mymq_send(mqd, msg1, 1, 1); Mymq_send(mqd, msg2, 2, 2); Mymq_send(mqd, msg3, 3, 3); Mymq_send(mqd, msg4, 4, 4); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc); if (prio != 1) err_quit("mq_receive returned prio %d, expected 1", prio); /***************************************************************/ /* send/receive 1 message */ Mymq_send(mqd, msg4, 4, 4); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); /* send 2 messages/receive in order */ Mymq_send(mqd, msg4, 4, 4); Mymq_send(mqd, msg3, 3, 3); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); /* send 3 messages/receive in order */ Mymq_send(mqd, msg4, 4, 4); Mymq_send(mqd, msg3, 3, 3); Mymq_send(mqd, msg2, 2, 2); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); /* send 4 messages/receive in order */ /* first check EMSGSIZE */ if ( (rc = mymq_send(mqd, msg4, 8, 4)) == 0 || errno != EMSGSIZE) err_sys("mq_send returned %d, expected EMSGSIZE", rc); Mymq_send(mqd, msg4, 4, 4); Mymq_send(mqd, msg3, 3, 3); Mymq_send(mqd, msg2, 2, 2); Mymq_send(mqd, msg1, 1, 1); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); /* first check EMSGSIZE */ if ( (rc = mymq_receive(mqd, msg, 6, &prio)) == 0 || errno != EMSGSIZE) err_sys("mq_receive returned %d, expected EMSGSIZE", rc); if ( (rc = Mymq_receive(mqd, msg, BUFFLEN, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc); if (prio != 1) err_quit("mq_receive returned prio %d, expected 1", prio); /* fill queue then close it */ Mymq_send(mqd, msg1, 1, 1); Mymq_send(mqd, msg2, 2, 2); Mymq_send(mqd, msg4, 4, 4); Mymq_send(mqd, msg3, 3, 3); Mymq_close(mqd); /* open existing queue nonblocking and read */ mqd = Mymq_open(argv[1], O_RDWR | O_NONBLOCK); Mymq_getattr(mqd, &info); if (info.mq_maxmsg != 4 || info.mq_msgsize != 7 || info.mq_flags != O_NONBLOCK || info.mq_curmsgs != 4) err_quit("2: maxmsg = %ld, msgsize = %ld, flags = %ld, curmsgs = %ld\n", info.mq_maxmsg, info.mq_msgsize, info.mq_flags, info.mq_curmsgs); if ( (rc = Mymq_receive(mqd, msg, info.mq_msgsize, &prio)) != 4) err_quit("mq_receive returned %d, expected 4", rc); if (prio != 4) err_quit("mq_receive returned prio %d, expected 4", prio); if ( (rc = Mymq_receive(mqd, msg, info.mq_msgsize, &prio)) != 3) err_quit("mq_receive returned %d, expected 3", rc); if (prio != 3) err_quit("mq_receive returned prio %d, expected 3", prio); if ( (rc = Mymq_receive(mqd, msg, info.mq_msgsize, &prio)) != 2) err_quit("mq_receive returned %d, expected 2", rc); if (prio != 2) err_quit("mq_receive returned prio %d, expected 2", prio); if ( (rc = Mymq_receive(mqd, msg, info.mq_msgsize, &prio)) != 1) err_quit("mq_receive returned %d, expected 1", rc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -