下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...进程实验3Linux进程间通信软中断信号的处理,实现同一用户的各进程之间的通信。相关的系统调用kill(pid,sig):发送信号signal〔sig,func〕:指定进程对信号sig的处理行为是调用函数func。程序清单#include<unistd.h>#include<stdio.h>#include<signal.h>voidwaiting();voidstop();intwait_mark;main(){ intp1,p2; while((p1=fork())==-1); if(p1>0) { while((p2=fork())==-1); if(p2>0) { printf("parent\n");/*父进程在此完成某个操作、或接收到用户从键盘输入的特殊按键命令后发出下面的信号。这里省略。*/kill(p1,16); kill(p2,17); wait(0); wait(0); printf("parentprocessidkilled!\n"); exit(0); } else/*p2==0*/ { printf("p2\n"); wait_mark=1; signal(17,stop); waiting(); printf("childprocess2iskilledbyparent!\n"); exit(0); } } else/*p1==0*/ { printf("p1\n");wait_mark=1; signal(16,stop); waiting(); printf("childprocess1iskelledbyparent!\n"); exit(0); }}voidwaiting(){while(wait_mark!=0);}voidstop(){wait_mark=0;}输入并运行此程序,分析程序的运行结果。消息的创立、发送和接收多个进程通过访问一个公共的消息队列来交换信息消息队列:即消息的一个链表任何进程都可以向消息队列中发送消息〔消息类型及正文〕,其它进程都可以从消息队列中根据类型获取相应的消息相关的系统调用头文件:#include<sys/msg.h>翻开或创立消息队列:intmsgget(key_tkey,intmsgflg);key:消息队列的键IPC_PRIVATE:创立一个私有的消息队列其它:可被多个进程使用的消息队列msgflg:设置操作类型及访问权限IPC_CREAT/IPC_EXCL获得或设置消息队列属性:intmsgctl(intmsgid,intcmd,structmsqid_ds*data);发送消息:intmsgsnd(intmsgid,constvoid*msgp,
size_tmsgsize,intflags);参数msgid:消息队列标识符idmsgp:指针,用户自定义缓冲区,可定义成构造体类型,包含两项longmtype;代表消息类型
charmtext[MTEXTSIZE];消息正文msgsize:要发送消息正文的长度mflags:标志,假设设置IPC_NOWAIT那么不等待消息发出就返回返回值:成功返回0,错误返回-1〔置errno〕接收消息intmsgrcv(intmsgid,void*msgp,size_tmtexsize,longmsgtype,intflags);参数:与msgsnd类似msgtype>0:只接收指定类型消息的第一个==0:不管什么消息类型都读取队列中第一个数据<0:接收等于或小于其绝对值的最低类型的第一个,如有5、6、17三类,假设为-6,那么获取类型5的。返回值成功:返回消息正文字节数错误:返回-1〔置errno〕程序清单#include<stdio.h>#include<sys/types.h>#include<sys/msg.h>#include<sys/ipc.h>#defineMSGKEY75structmsgform{ longmtype; charmsgtext[1030];}msg;intmsgqid,i;voidCLIENT(){ inti; charstring_i[5];msgqid=msgget(MSGKEY,0777); for(i=10;i>=1;i--) { msg.mtype=i; printf("(client)sent\n");sprintf(msg.msgtext,"thecontentofmessage");sprintf(string_i,"%d",i); strcat(msg.msgtext,string_i); strcat(msg.msgtext,"\n"); msgsnd(msgqid,&msg,1030,0);} exit(0);}voidSERVER(){ msgqid=msgget(MSGKEY,0777|IPC_CREAT); do { msgrcv(msgqid,&msg,1030,0,0); printf("(server)receivedmessage%d\n",msg.mtype);printf(“%s\n",msg.msgtext); }while(msg.mtype!=1); msgctl(msgqid,IPC_RMID,0);exit(0);}main(){ while((i=fork())==-1); if(!i)SERVER(); while((i=fork())==-1); if(!i)CLIENT(); wait(0); wait(0);}编辑并运行程序,并分析程序的运行结果。思考题:符号常量MSGKEY有什么作用server和client不使用同一个MSGKEY会出现什么问题程序扩展:client和server之间若何通过软中断信号控制进程的推进速度,使得client每发送一个消息,server就接收一个消息,然后client再发送下一个消息共享存储区的创立、发送和接收同一系统中的几个进程可共享某块物理内存。include<sys/shm.h>翻开或创立创立共享区:intshmget(key_tkey,size_tsize,intshmflg);参数key:键值IPC_PRIVATE:创立一个私有的shm其它:非IPC_PRIVATE整数值。size:指明shm的大小,假设shm已经存在,那么size应为0shmflg:设置访问权限及IPC_CREAT/IPC_EXCL返回值成功:该shm的id,当前进程是其拥有者及创立者
错误:-1将共享内存连接到进程中:void*shmat(intshmid,constvoid*shmaddr,intflags);参数shmid:共享内存标识符idshmaddr:进程映射内存段的地址,可指定,但一般设为NULL表示由系统安排。flags:对该内存的段设置是否只读 (SHM_RDONLY),默认是读写。返回值成功:进程中该内存段的地址错误:-1程序清单:#include<stdio.h>#include<sys/types.h>#include<sys/msg.h>#include<sys/ipc.h>#defineSHMKEY75intshmid,i;int*addr;voidCLIENT(){ inti;shmid=shmget(SHMKEY,1024,0777); addr=shmat(shmid,0,0); for(i=5;i>=0;i--) { while(*addr!=-1); printf("(client)sent,"); *addr=i;printf("clienti:%d\n",i); } exit(0);}voidSERVER(){ shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); addr=shmat(shmid,0,0); do { *addr=-1; while(*addr==-1); printf("(server)received,"); printf("server*addr%d\n",*addr); }while(*addr); shmctl(shmid,IPC_RMI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力项目劳务分包合同模板
- 物业服务合同附件探究
- 长期采购合同的劣势
- 采购水泥合同书范本
- 2024年围墙节能改造项目施工合同3篇
- 房屋买卖合同无效的原因及解决策略
- 2024年移动互联网应用推广合作合同
- 2024年生态修复土石方工程合同
- 2024-2030年计算机系统集成公司技术改造及扩产项目可行性研究报告
- 2024-2030年聚迷多元醇公司技术改造及扩产项目可行性研究报告
- 十篇英语说明文范文
- 简单咨询费合同范本英文版
- 《ADIDAS案例分析》课件
- 实验动物学:动物实验设计完整版
- 团体标准化文件制修订建议书
- 印度尼西亚民法
- 国寿新绿洲团体意外伤害保险(A款)条款
- 八年级上册语文第五单元思维导图
- 山东省烟台市牟平区2023-2024学年数学四年级第一学期期末考试试题含答案
- 北京市停工留薪期分类目录
- 第11课《宇宙生命之谜》阅读理解题含答案
评论
0/150
提交评论