我有几个进程通过msgsnd
向同一个mtype
向另一个进程(A)发送邮件。
进程A通过msgrcv
重新获取队列中的一条消息,然后应删除队列中具有特定mtype = contact_id
的所有其他消息。
发件人代码:
msg.mtype = (long)contact_id;
if (msgsnd(msg_id, &msg, sizeof(msg) == -1) {
fprintf(stderr, "Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
发件人每个进程只向A发送一条消息。
流程代码A:
msgrcv(msg_id, &msg, sizeof(msg), contact_id, 0); //first recive
while ((num_bytes = msgrcv(msg_id, &msg, sizeof(msg), contact_id, 0)) != -1 && errno != ENOMSG) {
printf("return value = %d - errno = %d %s\n",num_bytes, errno, strerror(errno));
//code
}
这是我的解决方案但不起作用。它进入一个循环并且不会退出它。输出:return value = 24 - errno = 0 Success
如何编辑while条件?