进程实验--进程间通信(管道、消息、共享内存、软中断).docx
《进程实验--进程间通信(管道、消息、共享内存、软中断).docx》由会员分享,可在线阅读,更多相关《进程实验--进程间通信(管道、消息、共享内存、软中断).docx(5页珍藏版)》请在优知文库上搜索。
1、进程实验31.inux进程间通信一、软中断信号的处理,实现同一用户的各进程之间的通信。相关的系统调用 kill(pid,sig):发送信号 signal(sig,func):指定进程对信号Sig的处理行为是调用函数func。程序清单#include#include#includevoidwaiting();voidstop();intwait_mark;main()(intp1.p2;while(pl=fbrk()=-l);if(plO)(while(p2=fbrk()=-1);if(p20)printf(,parentn);*父进程在此完成某个操作、或接收到用户从键盘输入的特殊按键命令后发出
2、下面的信号。这里省略。*/kill(pl,16);kill(p2,17);wait(0);wait(0);printf(parentprocessidkilled!n);exit(O);)else/*p2=0*/(printf(,p2n);WaiJmark=1;signal(!7,stop);waiting();printf(,childprocess2iskilledbyparent!n);exit(O);else*pl=0*/printf(,pln);Wai1.mark=I;signal(16,stop);waiting();printf(,childprocess1iskelledbyp
3、arent!n,);exit(0);1)voidwaiting()(While(Wai1.mark!=0);voidstop()waijmark=O;输入并运行此程序,分析程序的运行结果。二、消息的创立、发送和接收 多个进程通过访问一个公共的消息队列来交换信息 消息队列:即消息的一个链表 任何进程都可以向消息队列中发送消息(消息类型及正文),其它进程都可以从消息队列中根据类型获取相应的消息 相关的系统调用头文件:#include翻开或创立消息队列:intmsgget(key_tkey,intmsgflg);key:消息队列的键 1PC_PRIVATE:创立一个私有的消息队列 其它:可被多个进程
4、使用的消息队列msgflg:设置操作类型及访问权限IPC-CREAt/IPC-EXC1.获得或设置消息队列属性:intmsgctl(intmsgid,intcmd,structmsqid_ds*data);发送消息:intmsgsnd(intmsgid,constvoid*msgp,size_tmsgsize,intflags);参数 msgid:消息队列标识符id msgp:指针,用户自定义缓冲区,可定义成构造体类型,包含两项longmlype;代表消息类型charmtextMTEXTSIZE;消息正文 msgsize:要发送消息正文的长度 mfiags:标志,假设设置Ipclnowait那
5、么不等待消息发出就返回返回值:成功返回0,错误返回-I(置errno)接收消息intmsgrcv(intmsgid,void*msgp,size_tmtexsize,longmsgtype,intflags);参数:与msgsnd类似msgtype 0:只接收指定类型消息的第一个 =0:不管什么消息类型都读取队列中第一个数据 0:接收等于或小于其绝对值的最低类型的第一个,如有5、6、17三类,假设为-6,那么获取类型5的。返回值 成功:返回消息正文字节数 错误:返回-1(置errno)程序清单#include#include#include#include#defineMSGKEY75stru
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 实验 通信 管道 消息 共享 内存 中断