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

一个消息传递的疑问

    来源: 互联网  发布时间:2015-12-22

    本文导语:  请帮忙看一下下面这段程序,我fork了两个子进程,子进程p1传递消息,p2接受并打印消息。 但运行时p2却接收不到消息,求助。。 #include  #include  #include  #include  #include  #include  #define KEY 500 struct msgbuf{ long mty...

请帮忙看一下下面这段程序,我fork了两个子进程,子进程p1传递消息,p2接受并打印消息。

但运行时p2却接收不到消息,求助。。

#include 
#include 
#include 
#include 
#include 
#include 

#define KEY 500

struct msgbuf{
long mtype;
char mtext[10];
};
int msgqid;
int main()
{
int p1, p2;
msgqid = msgget(KEY, IPC_CREAT | 0777);
while(-1 == (p1 = fork()));
if(!p1){
int i/*, msgqid*/;
struct msgbuf msg;
/* msgqid = msgget(KEY, IPC_CREAT | 0666);*/
for(i = 10; i >= 1; i--){
msg.mtype = i;
sprintf(msg.mtext, "%ldn", i);
msgsnd(msgqid, &msg, sizeof(struct msgbuf), 0);
printf("client sended message!n");
sleep(1);
}
exit(0);
}
while(-1 == (p2 = fork()));
if(!p2){
int i/*, msgqid*/;
struct msgbuf msg;
/* msgqid = msgget(KEY, IPC_CREAT | IPC_EXCL | 0666);*/
do{
if(msgrcv(msgqid, &msg, sizeof(struct msgbuf), 0, 0) > 0){
printf("serve received message!n");
printf("mtype = %ld, mtext = %sn", msg.mtype, msg.mtext);
}
sleep(1);
}while(msg.mtype != 1);
msgctl(msgqid, IPC_RMID, NULL);
exit(0);
}
wait(NULL);
wait(NULL);
return 0;
}




|
友情UP

|
可以接收.
[root@localhost a]# ./pass_msg
client sended message!
serve received message!
mtype = 10, mtext = 10

client sended message!
serve received message!
mtype = 9, mtext = 9

client sended message!
serve received message!
mtype = 8, mtext = 8

client sended message!
serve received message!
mtype = 7, mtext = 7

client sended message!
serve received message!
mtype = 6, mtext = 6

client sended message!
serve received message!
mtype = 5, mtext = 5

client sended message!
serve received message!
mtype = 4, mtext = 4

client sended message!
serve received message!
mtype = 3, mtext = 3

client sended message!
serve received message!
mtype = 2, mtext = 2

client sended message!
serve received message!
mtype = 1, mtext = 1



|
up

|
在redhat9上测试过,没问题。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点 iis7站长之家
  • 消息队列中消息大小
  • HP-UX 下消息队列能否保证消息包的先进先出?
  • 各位专家,如何知道消息队列中消息是否已经超时了?
  • 用java,怎样实现从一个类的发一个消息(消息本身也是一个类)到另一个类?
  • **********写了一个简单的UDP程序,接受英文的消息正常,接受中文的消息显示不完整,请问是什么原因
  • sco unix中消息队列中的一次可发送的最长消息的字节长度是多少?
  • 消息队列消息总大小的问题
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点
  • 消息队列收不到消息
  • 怎样在程序中修改一个系统V消息队列中消息的个数::
  • 关于消息队列的问题
  • 创建消息队列,接受消息失败,接受程序再发送错误消息给发送程序//程序能运行,不出结果
  • 一个消息队列例子,第一次运行正确,第二次运行就提示消息发送失败了
  • unix下一个关于消息队列的问题
  • MQTT 消息代理 Mosquitto
  • 怎么查询消息队列中每条消息的状态
  • 关于消息队列
  • linux 消息队列长度的问题
  • Linux下使用C++互斥访问文件+消息队列
  • liunx 消息队列的问题


  • 站内导航:


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

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

    浙ICP备11055608号-3