当前位置:  技术问答>linux和unix

关于消息队列的使用的问题

    来源: 互联网  发布时间:2016-02-23

    本文导语:  近期用消息队列写进程间通信的程序,但遇到如下问题,希望大家能帮忙看下,小弟先在这里致谢了,并祝各位圣诞快乐:  rev:  #include     #include     #include     main()  {  int   gflags,rflags;  key_t   key;  int...

近期用消息队列写进程间通信的程序,但遇到如下问题,希望大家能帮忙看下,小弟先在这里致谢了,并祝各位圣诞快乐: 
rev: 
#include    
#include    
#include    

main() 

int   gflags,rflags; 
key_t   key; 
int   msgid; 
int   reval; 

struct   msgmbuf 

int   mtype; 
char   mtext[10]; 
}msg_rbuf; 

struct   msqid_ds   msg_ginfo; 

char*   msgpath="/unix/msgqueue"; 
key   =   ftok(msgpath,'a'); 
gflags   =   IPC_CREAT ¦IPC_EXCL; 
msgid   =   msgget(key,gflags ¦00666); 
if(msgid   ==   -1) 

printf("msg   create   error   in   msg2.cn"); 
return; 

for(;;) 

rflags   =   IPC_NOWAIT ¦MSG_NOERROR; 
reval   =   msgrcv(msgid,&msg_rbuf,0,10,rflags); 
if(reval   ==   -1) 

printf("read   msg   error   in   msg2.cn"); 

if(msg_rbuf.mtext[0]   !=   'n') 

printf("%c",msg_rbuf.mtext[0]); 

else 

reval   =   msgctl(msgid,IPC_RMID,NULL);//delete   msgqueue; 
break; 




snd: 

#include    
#include    
#include    

int   msgcopy(int[],int[],int); 

main() 

int   gflags,sflags; 
key_t   key; 
int   msgid; 
int   reval; 

struct   msgsbuf 

int   mtype; 
char   mtext[1]; 
}msg_sbuf; 

struct   msqid_ds   msg_ginfo,msg_sinfo; 

char   *msgpath   =   "/unix/msgqueue"; 
char   input; 

key   =   ftok(msgpath,'a'); 
gflags   =   IPC_CREAT ¦IPC_EXCL; 
msgid   =   msgget(key,gflags ¦00666); 
if(msgid   ==   -1) 

printf("msg   create   error   in   msg1.cn"); 
return; 


sflags   =   IPC_NOWAIT; 
msg_sbuf.mtype   =   10; 

for(;;) 

if(input   =   getchar()   !=   'n') 

msg_sbuf.mtext[0]   =   input; 
reval   =   msgsnd(msgid,&msg_sbuf,sizeof(msg_sbuf.mtext),sflags); 
if(reval   ==   -1) 

printf("message   send   error   in   msg1.cn"); 



else 

msg_sbuf.mtext[0]   =   'n'; 
reval   =   msgsnd(msgid,&msg_sbuf,sizeof(msg_sbuf.mtext),sflags); 
if(reval   ==   -1) 

printf("message   send   error   in   msg1.cn"); 

break; 



当我先运行snd,再运行rev,提示msg   create   error(rev中报错),我个人感觉是snd已经创建了一个相同的消息队列,然后rev无法创建,就报错,但是,由于不晓得怎么删除这个消息队列,就没有办法进一步测试,请问各位是这样的原因么,还有我想请问的是如果我想两个进程中无论哪个先启动,在该消息队列不存在时都能创建一个新的消息队列,如果已经存在,则获得消息队列,该怎么改程序呢,谢谢大家了

|
gflags       =       IPC_CREAT   ¦IPC_EXCL; 
都修改为:
gflags       =       IPC_CREAT ;
应该就不会报你说的错误了.

删除消息队列:
ipcrm -Q key
或者:
ipcrm -q id 

    
 
 

您可能感兴趣的文章:

  • HP-UX 下消息队列能否保证消息包的先进先出?
  • 各位专家,如何知道消息队列中消息是否已经超时了?
  • unix下一个关于消息队列的问题
  • 消息队列中消息大小
  • linux 消息队列长度的问题
  • liunx 消息队列的问题
  • 关于消息队列的问题
  • sco unix中消息队列中的一次可发送的最长消息的字节长度是多少?
  • 消息队列消息总大小的问题
  • 请教:写入队列消息的长度问题
  • 关于消息队列
  • 消息队列的清理问题
  • 消息队列问题
  • 关于后台服务进程不能读消息队列的问题?200分求答急急。。。
  • unix关于消息队列和函数msgctl的问题。。急啊!!!
  • Linux下使用C++互斥访问文件+消息队列
  • LINUX如何调整POSIX消息队列大小
  • linux下消息队列不阻塞
  • 单个消息队列能实现进程间聊天功能吗?
  • 请教消息队列相关问题
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 消息队列一般是怎么使用的,是采用While的方式进行轮询么
  • 做过中国农业银行项目的朋友请进,关于农行使用的解析XML消息的库如何使用!
  • 使用SYSTEM V队列,有关消息资源释放的问题
  • ATCS10_SCO505版本,免费的类似TUXEDO消息中间件,欢迎大家使用!!!
  • 请问posix IPC中使用mq_open()创建消息队列的问题?
  • 关于消息队列的使用,欢迎大家讨论
  • python基础教程之python消息摘要算法使用示例
  • 消息队列的使用疑问??
  • 请问一个使用JMS发送消息的问题:
  • 使用udp,客户端和服务器之间相互发送消息的例子
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JavaScript中的消息框(警告框,确认框,提示框)语法
  • 用java,怎样实现从一个类的发一个消息(消息本身也是一个类)到另一个类?
  • **********写了一个简单的UDP程序,接受英文的消息正常,接受中文的消息显示不完整,请问是什么原因
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点
  • 消息队列收不到消息
  • 怎样在程序中修改一个系统V消息队列中消息的个数::
  • 创建消息队列,接受消息失败,接受程序再发送错误消息给发送程序//程序能运行,不出结果
  • 一个消息队列例子,第一次运行正确,第二次运行就提示消息发送失败了
  • MQTT 消息代理 Mosquitto
  • 怎么查询消息队列中每条消息的状态
  • 怎样获取终端的所有打印消息
  • *** 高分请问关于触发消息事件的问题? ***
  • 消息隊列與select的問題
  • 消息服务器 Json Messaging
  • 请教一个关于linux下的消息机制的问题
  • 分布式分组消息系统 Spread
  • 消息中间件的功能?各位铜人帮忙!
  • 页面消息提醒插件 Sticky
  • 消息通知提醒插件 jQuery Notify
  • 求linux下监视消息的工具
  • 关于多进程同时从消息队列取消息的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3