操作系统实验6Linux进程通信_第1页
操作系统实验6Linux进程通信_第2页
操作系统实验6Linux进程通信_第3页
操作系统实验6Linux进程通信_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验6 Linux进程通信-消息传递一、实验目的:掌握操作系统的进程通信原理。熟悉linux的进程通信方式。设计程序,实现消息传递通信。二、实验原理:1、函数ftok头文件:#include #include 原型:key_t ftok(char *fname,int id)说明:系统建立IPC (进程间通信)时必须指定一个ID值,通常情况下该ID值通过ftok 函数得到。ftok函数把一个已存在的路径名和一个整数标识符转换成一个key_t值,fname 是一个存在的可访问的路径或文件,id必须不能为0。2、函数 msgget头文件:#include #include #include 原型:

2、int msgget(key_t key,int msgflg);说明:获取与某个键关联的消息队列标识,用来创建新的消息队列或获取已有的消息队 列。第一个参数是关键字值(通常是由ftok()返回的)。然后此关键字值将会和其他已经存 在于系统内核中的关键字值比较。第二个参数为IPC_CREAT时,如果内核中没有此队列,则 创建它,并且返回一个新创建的消息队列的标识符。失败返回-1。3、函数 fgets头文件:#inclue 原型:char *fgets(char *s,int size,FILE *stream);说明:用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出

3、 现换行字符,读到文件尾或是已读了 size-1个字符为止,最后加上0作为字符串结束。第 三个参数可以是文件流,也可以是输入流stdin。4、比较字符串函数strncmp头文件:#include 原型:int strncmp(const char *s1,const char *s2,int n);说明:若参数s1和s2字符串相同则返回0,s1若大于s2则返回大于0的值,s1若小 于s2则返回小于0的值。5、函数 msgctl头文件:#include #include #include 原型:int msgctl(int msqid,int cmd,struct msqid_ds *buf)说

4、明:函数msgctl提供了几种方式来控制消息队列的动作。参数msqid为要处理的消息 队列标识符,参数cmd为要控制的操作,值为IPC_RMID表示要删除消息队列和其数据结构。 若成功返回0,否则返回-1。6、函数 msgsnd头文件:#include #include #include 原型:int msgsnd(int msqid,struct msgbuf *msgp,int msgsz,int msgflg)说明:函数msgsnd将参数msgp指定的信息送至参数msqid的消息队列中。参数msgp的 结构如下:struct msgbuf(long mtype;char mtextl;参

5、数msgsz表示要发送消息的长度,参数msgflg表示控制函数行为的标志,0表示忽略 标志位。若成功返回0,否则返回-1。7、函数 msgrcv头文件:#include #include #include 原型:int msgrcv(int msqid,struct msgbuf *msgp,int msgsz,long msgtyp,int msgflg) 说明:函数msgrcv将参数msqid指定的消息队列读取出来,然后存于参数msgp所指定 的结构内。参数msgsz表示消息数据的长度,参数msgtyp用来指定所要读取的消息种类, msgtyp=0返回队列中的最旧的消息,msgtyp0返回

6、队列内第一项msgtyp与mtype相同的信 息,msgtyp0返回队列内第一项mtype小于或等于msgtyp绝对值的消息。参数msgflg是控 制函数行为的标志,值为0表示忽略,值为IPC_NOWAIT表示如果队列内没有消息,则不要等 待。若成功返回读取到的消息数据长度,否则返回-1。三、实验内容:1、编写6_1/程序:rootlocalhost#vi 6_1.cl nclude #include i ncludr 4 sys /ms g . hit l nclude Etdio, h津 l nclude typedcf 3 tract _H3g_buf .long type;万消息类型c

7、h:3T but 100 : /消息内唇 ns g_bijf;int main I; int key., qi d:nsg_buf tuf ;key=ftok (.Viod1C.),qid=msESat (key, IPCj2REAT| C666j;printf i: . k町:防1 Inqid:key, qid);buf. -typ e=10 :pnntfL清澈坚消息,每荼消息以回车蜻柬如果StAauit.贝!1程序结束让H uhilt(L:fjetr .buz . b if j 10Cj r ;it (stincniz (juf. but. quit. D=匚)fif (nEg c tl

8、(qid, IPC .EMID, NULL #i nc 1 ude #include #include . htypedef st rue t _nE3_hu.f tIonsblial LL,rlCOin: nainO (int w qlc;mg3_Suf ?uf;kev=f: ckC/root l(u :ll; (kc/j irC_CRZAl 13GGG),pr i nt 三(”上 ey : % dnqi d : % dr/ k ey, d);tJhi I = 1) if(nEgrcv (qidj Czoid Q&5uf, 1) 0. 0)3j jCtpdt( mmgrc/F );?xit(-1);priiiLlX Lypu ;紧1二:紧=;插,ll匚whirn 0;编译:rootlocalhost#gcc 6_2.c - o 6_23、打开第一个终端窗口并运行6_1.c运行:rootlocalhost#./6.1输入一些消息,每条消息以回车结束,如果输入quit则程序结束。查看结果:root(aiocalhost Linux# ./岳_1Ikey; 167835138qid:720901请输入一些消息,每条消息以回车结束,如果输入quit,则程序结更abcdef123

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论