当前位置: 技术问答>linux和unix
请教一个消息队列的问题
来源: 互联网 发布时间:2016-06-01
本文导语: 我用网上的一段消息队列的代码进行进程间通信. 一方是循环发送再接收数据 while(1) { printf("Lucy: "); fgets(msg.mtext, 256, stdin); if (strncmp("quit", msg.mtext, 4) == 0) { msgctl(mqid,IPC_RMID,NULL); exit(0); ...
我用网上的一段消息队列的代码进行进程间通信.
一方是循环发送再接收数据
while(1)
{
printf("Lucy: ");
fgets(msg.mtext, 256, stdin);
if (strncmp("quit", msg.mtext, 4) == 0)
{
msgctl(mqid,IPC_RMID,NULL);
exit(0);
}
msg.mtext[strlen(msg.mtext)-1] = '';
msg.mtype = LUCY;
msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);
msgrcv(mqid,&msg,256,PETER,0);
printf("Peter: %sn", msg.mtext);
}
}
另一方也类似于此.
但是这样,我发现,我每接收一次对方发来的数据,就必须在屏幕回发数据,然后才能继续接收数据.而对方的数据是随机发来的,我向要他一发来我就可以就收数据,要怎样才合适呢?我也不应该把msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);去掉,因为我有时候也要发送过去.
我想来想去,难道要开2个消息队列才可以实现我的需求吗?
一方是循环发送再接收数据
while(1)
{
printf("Lucy: ");
fgets(msg.mtext, 256, stdin);
if (strncmp("quit", msg.mtext, 4) == 0)
{
msgctl(mqid,IPC_RMID,NULL);
exit(0);
}
msg.mtext[strlen(msg.mtext)-1] = '';
msg.mtype = LUCY;
msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);
msgrcv(mqid,&msg,256,PETER,0);
printf("Peter: %sn", msg.mtext);
}
}
另一方也类似于此.
但是这样,我发现,我每接收一次对方发来的数据,就必须在屏幕回发数据,然后才能继续接收数据.而对方的数据是随机发来的,我向要他一发来我就可以就收数据,要怎样才合适呢?我也不应该把msgsnd(mqid,&msg,strlen(msg.mtext) + 1,0);去掉,因为我有时候也要发送过去.
我想来想去,难道要开2个消息队列才可以实现我的需求吗?
|
我觉得要实现你的功能的话,应该抛弃消息队列,
改用socket来实现。
改用socket来实现。
|
不是很明白你的意思,但是你不是在循环内调用了 fgets 函数,它一般会阻塞等待标准输入设备数据,没有数据的话,
貌似程序就会一直等待键盘输入吧...
貌似程序就会一直等待键盘输入吧...