关于消息队列的几点疑惑,望解答
代码1:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
int main()
{
key_t Key1,Key2,Key3; //定义了3个键值变量
if((Key1=ftok("/etc/profile",1))==-1) //调用ftok生成键值
{
perror("ftok");
exit (1);
}
if((Key2=ftok("/etc/profile",2))==-1) //调用ftok生成键值
{
perror("ftok");
exit (2);
}
if((Key3=ftok("/etc/profile",1))==-1) //调用ftok生成键值
{
perror("ftok");
exit (3);
}
printf("Key1=%ld Key2=%ld Key3=%ld.\n",Key1,Key2,Key3);
exit (0);
}
代码2::#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int main()
{
key_t key;
int nMsgld; //消息队列标识符
if(key=ftok("/etc/profile",1)==-1) //生成键值
{
perror("ftok");
exit (1);
}
printf("key=%ld.\n",key);
if((nMsgld=msgget(key,IPC_CREAT|IPC_EXCL|0666))==-1) //创建消息队列
{
if(errno!=EEXIST) //创建失败并且不是由于队列已存在
{
perror("msgget");
exit (2);
}
if((nMsgld=msgget(key,0))==-1) //消息队列已存在,返回队列描述符
{
perror("msgget");
exit (3);
}
}
printf("MsgID=%d\n",nMsgld); //输出消息队列描述符
exit (0);
}
疑惑1::同样对于if(key=ftok("/etc/profile",1)==-1) //生成键值 这条语句,为什么生成的键值不同??后面那个代码2 的键值怎么会是 0 呢??
疑惑2::当我运行第二个函数几下后,出现如下结果:;
long@long-laptop:/home/IPC/XXDL$ ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes messages
0x00000000 0 long 666 0 0
0x00000000 32769 long 666 0 0
0x00000000 65538 long 666 0 0
0x00000000 98307 long 666 0 0
0x00000000 131076 long 666 0 0
0x00000000 163845 long 666 0 0
0x00000000 196614 long 666 0 0
0x00000000 229383 long 666 0 0
0x00000000 262152 long 666 0 0
为什么我创建了一个消息之后,再运行程序貌似又创建了一个新消息了,程序的代码不是消息存在的话,只是输出消息的描述符马??我的理解应该再运行程序返回的描述符会相同,为什么出现上面的结果呢??
刚学习,请解释一下。。。。多谢了//////
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不好意思,我掉了一个符号。。。。。。。哎。。。。。。。。。解决了。。。。。。