linux下消息队列阻塞读取超时问题

墨上闲 2016-06-23 04:22:50
c程序在阻塞recv时(指定type值的),如果消息队列内没有这个消息,程序会一直等待,那么想要程序在规定时间内结束阻塞读取继续往下运行,该如何做?
...全文
1203 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxingway 2016-06-24
  • 打赏
  • 举报
回复
ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtype, int msgflag) #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> 功能: 从队列中接收消息 参数: msqid:已打开的消息队列id msgp:存放消息的结构体指针。msgp->mtype与第四个参数是相同的。 msgsz:消息的字节数,指定mtext的大小。 msgtype:消息类型,消息类型 mtype的值。如果为0,则接受该队列中的第一条信息,如果小于0,则接受小于该值的绝对值的消息类型,如果大于0,接受指定类型的消息,即该值消息。 msgflag:函数的控制属性。 msgflag: MSG_NOERROR:若返回的消息比nbytes字节多,则消息就会截短到nbytes字节,且不通知消息发送进程. IPC_NOWAIT:调用进程会立即返回.若没有收到消息则返回-1. 0:msgrcv调用阻塞直到条件满足为止. 在成功地读取了一条消息以后,队列中的这条消息将被删除。 -------------------------------------------------------------------------------------------- 内核的消息队列没有这功能。但可以考虑使用不阻塞的模式

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧