【Linux基础】消息队列应用

1. 消息队列的相关函数
消息队列的实现包括创建或打开消息队列、添加消处、读取消息和控制消息队列这四种操作。其中创建或打开消息队列使用的函数是msgget,这里创建的消息队列的数量会受到系统消息队列数量的限制;添加消息使用的函数是msgsnd函数,它把消息添加到已打开的消息队列未尾;读取消息使用的函数是msgrcv,它把消息从消息队列中取走,与FIFO不同的是,这里可以指定取走某一条消息;最后控制消息队列使用的函数是msgctl,它可以完成多项功能。
消息队列相关函数的语法如表 9‑6、表 9‑7、表 9‑8和表 9‑9所示:

1.jpg (35.46 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-11 06:57 上传

2.jpg (64.38 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-11 06:58 上传

3.jpg (80.31 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-11 06:58 上传

4.jpg (61.46 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-11 06:58 上传


1. 消息队列实例
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<unistd.h>
struct msg_data
{
long msg_type;
char msg_text[512];
};
int main()
{
int msgid;
key_t key;
int len;
struct msg_data msg;
if((key=ftok(".",'a'))==-1)
{
printf("error ftok\n");
return 1;
}
if((msgid=msgget(key,IPC_CREAT|0666))==-1)
{
printf("error msgget\n");
return 1;
}
puts("please enter the message to queue:");
if((fgets((&msg)->msg_text,512,stdin))==NULL)
{
puts("no message");
return 1;
}
msg.msg_type=getpid();
len=strlen(msg.msg_text);
if(msgsnd(msgid,&msg,len,0)<0)
{
printf("error msgsnd\n");
return 1;
}
if(msgrcv(msgid,&msg,512,0,0)<0)
{
printf("error msgrcv\n");
return 1;
}
printf("rev message is :%s",(&msg)->msg_text);
if(msgctl(msgid,IPC_RMID,NULL)<0)
{
printf("error msgct\n");
return 1;
}
return 0;
}
编译运行结果如下:
[root@localhost msg]# ./msgrs
please enter the message to queue:
how are you
rev message is :how are you
本文转载于唯C教育,【Linux基础】消息队列应用
http://www.weicedu.com/forum.php?mod=viewthread&tid=155&fromuid=4
(出处: http://www.weicedu.com/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值