当前位置: 技术问答>linux和unix
进程间通信-消息队列重大问题
来源: 互联网 发布时间:2016-05-04
本文导语: 现在,我有一个进程A,要与另一个进程B进行通信,A创建一个消息队列,msqid = msgget(key,IPC_CREAT|0777),并向消息队列发送消息,msgsnd(msqid,&buf,strlen(msg),0);而B可以通过 msgrcv(msqid,&buffer,BUFSIZ,msg_type,0);得到A向消息队列中写...
现在,我有一个进程A,要与另一个进程B进行通信,A创建一个消息队列,msqid = msgget(key,IPC_CREAT|0777),并向消息队列发送消息,msgsnd(msqid,&buf,strlen(msg),0);而B可以通过 msgrcv(msqid,&buffer,BUFSIZ,msg_type,0);得到A向消息队列中写入的消息。
这样是可以的。
我的问题来了::
进程B根本就不知道msqid的情况下怎么办呀?实际情况也是这样。进程B想读取msqid = 某一个特定值的消息,可是并不知道msqid = ???,并不知道这个特定值X是多少,因为是A动态生成的。
不可能一个一个查询所有的消息队列信息,匹配检索吧!我想有些东西我可能不知道,希望各位高手相助!!!!
谢谢!!
这样是可以的。
我的问题来了::
进程B根本就不知道msqid的情况下怎么办呀?实际情况也是这样。进程B想读取msqid = 某一个特定值的消息,可是并不知道msqid = ???,并不知道这个特定值X是多少,因为是A动态生成的。
不可能一个一个查询所有的消息队列信息,匹配检索吧!我想有些东西我可能不知道,希望各位高手相助!!!!
谢谢!!
|
两个进程都应该使用ftok, 以及msgget()获取msgid. 如下所示:
key_t key;
char* msgpath = "/tmp/msgqueue";
int gflags;
key=ftok(msgpath,'a');
gflags=IPC_CREAT;
iMsgid = msgget(key,gflags|00666);
key_t key;
char* msgpath = "/tmp/msgqueue";
int gflags;
key=ftok(msgpath,'a');
gflags=IPC_CREAT;
iMsgid = msgget(key,gflags|00666);