c 消息队列列的msgflg是2048什么意思

trackbacks-0
linux下提供了以下几个接口,用于消息队列的使用:
#include &sys/types.h&
#include &sys/ipc.h&
#include &sys/msg.h&
函数原型:
key_t ftok( char * fname, int id )
int msgget(key_t key, int msgflg)
&& & & &int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, long msgtyp, int msgflg);&
int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg);&
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
每个消息都类似如下的数据结构:
struct msgbuf{
char mtext[1];
一般使用步骤:
1. 用ftok产生一个key。
2. 调用msgget(使用key作为参数)产生一个队列
3. 进程可以用msgsnd发送消息到这个队列,相应的别的进程用msgrcv读取。
&& &这里需要注意msgsnd可能会失败的两个情况:&
&& &a) 可能被中断打断(包括msgsnd和msgrcv). 尤其是大流量应用中更容易出现.&比较安全的用法是判断操作是否被中断打断,如果被打断, & & & & & &则需要继续尝试。
&& &b) 消息队列满。产生这个错误,则需要考虑提高系统消息队列规格,或者查看消息接收处是否有问题
4. msgctl函数可以用来删除消息队列&&& 消息队列产生之后,除非明确的删除(可以用),产生的队列会一直保留在系统中。linux下消息队列的个数是有限的,注意不要泄露。如果 & & & 使用已经达到上限,msgget调用会失败,产生的错误码对应的提示信息为no space left on device.
1.消息的类型&mtype 不需为非0值。如果使用0,则msgsnd会失败,并得到&Invalid argument&错误。
2.msgflg为0表示阻塞等待,如果msgflg为IPC_NOWAIT表示非阻塞。
3.最好使用root权限执行消息队列,否则msgrcv 提示 "Permission denied"。
阅读(...) 评论()消息队列_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
消​息​队​列
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 redis 消息队列 的文章

 

随机推荐