版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux进程间通信(IPC)实验四消息队列/s/1ntmRK4x消息队列就是一些消息的列表。用户可以从消息队列中添加消息和读取消息等。从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。同时,这些消息又是存在于内核中的,由“队列ID”来标识。消息的结构。受到两方面约束,长度必须小于系统规定上限,其次,它必须以一个长整型变量开始,接受函数将用这个成员变量来确定消息类型structmy_message{ longmessage_type; /*data*/}消息队列消息队列的实现包括四种操作:创建或打开消息队列:msgget(),数量会受到系统消息队列数量的限制。添加消息:msgsnd(),把消息添加到已打开的消息队列末尾;读取消息:msgrcv(),把消息从消息队列中取走,与FIFO不同的是,这里可以指定取走某一条消息;控制消息队列:msgctl(),可以完成多项功能。消息队列消息队列消息队列消息队列消息队列创建队列#include<sys/msg.h>#include<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h>intmain(void){
int
qid;
key_t
key;
key=113;
qid=msgget(key,IPC_CREAT|0666)
;
/*
创建一个消息队列
*/
if(qid<0){
/*
创建一个消息队列失败
*/
perror("msgget");
exit(1);
}
printf("createdqueueid:%d/n",qid);
/*
输出消息队列的
ID*/
system("ipcs-q");
/*
查看系统
IPC
的状态
*/
exit(0);}删除队列#include<sys/msg.h>#include<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){
intqid;
if(argc!=2){/*
命令行参数出错
*/
puts("USAGE:del_msgq.c<queueID>");
exit(1);
}
qid=atoi(argv[1]);/*
通过命令行参数得到组
ID*/
system("ipcs-q");
if((msgctl(qid,IPC_RMID,NULL))<0){/*
删除指定的消息队列
*/
perror("msgctl");
exit(1);
}
system("ipcs-q");
printf("successfullyremoved%d
queue/n",qid);/*
删除队列成功
*/
exit(0);}发送队列#include<sys/msg.h>#include<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h>structmsg{/*声明消息结构体*/longmsg_types;/*消息类型成员*/charmsg_buf[511];/*消息*/};intmain(void){intqid;intpid;intlen;structmsgpmsg;/*一个消息的结构体变量*/
pmsg.msg_types=getpid();/*消息类型为当前进程的ID*/sprintf(pmsg.msg_buf,"hello!thisis:%d/n/0",getpid());/*初始化消息*/len=strlen(pmsg.msg_buf);/*取得消息长度*/
if((qid=msgget(IPC_PRIVATE,IPC_CREAT|0666))<0){/*创建一个消息队列*/perror("msgget");exit(1);}
if((msgsnd(qid,&pmsg,len,0))<0){/*向消息队列中发送消息*/perror("msgsn");exit(1);}printf("successfullysendamessagetothequeue:%d/n",qid);exit(0);}接收队列#include<sys/msg.h>#include<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h>#defineBUFSZ4096structmsg{
/*
声明消息结构体
*/
longmsg_types;
/*
消息类型成员
*/
charmsg_buf[511];
/*
消息
*/};intmain(intargc,char*argv[]){
int
qid;
int
len;
structmsgpmsg;
if(argc!=2){
/**/
perror("USAGE:read_msg<queueID>");
exit(1);
}
qid=atoi(argv[1]);
/*
从命令行中获得消息队列的
ID*/
/*
从指定队列读取消息
*/
len=msgrcv(qid,&pmsg,BUFSZ,0,0);
if(len>0){
pmsg.msg_buf[len]='/0';
/*
为消息添加结束符
*/
printf("readingqueueid:%05ld/n",qid);/*
输出队列
ID*/
/*
该消息类型就是发送消息的进程
ID*/
printf("messagetype:%05ld/n",pmsg.msg_types);
printf("messagelength:%dbytes/n",len);
/*
消息长度
*/
printf("mesagetext:%s/n",pmsg.msg_buf);/*
消息内容
*/
}
elseif(len==0)
printf("havenomessagefromqueue%d/n",qid);
else{
perror("msgrcv");
exit(1);
}
system("ipcs-q")
exit(0);}提示:ipcs–q查看消息队列信息作业编写一对程序recv.c和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美学心得(第二百九十二集) 罗国正
- 2025年湖北省当阳市高考物理二轮专题模拟卷及1套参考答案详解
- 2025年河南省灵宝市高考物理学业考试考试卷附参考答案详解【A卷】
- 2026年湖北省大冶市高考物理一轮复习试卷含答案详解(培优A卷)
- 2026年浙江省永康市高考物理三轮冲刺测试卷【重点】附答案详解
- 2025年河南省灵宝市高考物理周测考试卷(典型题)附答案详解
- 2026年四川省万源市高考物理5月学情自测试卷附参考答案详解(夺分金卷)
- 2025年江西省井冈山市高考物理二模测试卷含答案详解(精练)
- 智能调度降本增效:AI劳动力软件崛起
- 洁净室服装全球前13强生产商排名及市场份额(by QYResearch)
- 骨科关节置换手术诊疗指南及操作规范(2025版)
- 2026中期展望·宏观篇:上半场的预期差下半场的破局点
- 2026年辽宁现代服务职业技术学院单招职业技能测试题库及答案详解1套
- 中国眩晕诊疗指南(2026版)
- 国家中医药管理局《中医药事业发展“十五五”规划》全文
- 国开本科《中国当代文学专题》形考任务3试题及答案
- GB/T 6568-2024带电作业用屏蔽服装
- 产品含量报告模板
- 初中八年级物理课件-开学第一课
- 2023年7月国开电大本科中国现代文学专题期末考试试题及答案
- 多旋翼无人机原理及操作方式
评论
0/150
提交评论