- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华南理工大学操作系统课程实验报告实验题目: 进程间通信(IPC)姓名:余柳红 学号:201330571011班级:信息安全 组别:无合作者: 无指导教师: 贺小箭实验概述【实验目的】了解IPC通信中的信号、管道、消息、共享存储区的通信原理和基本技术掌握linux环境中构造这些通信机制的方法和步骤;熟悉在实现通信中使用的系统调用和编程方式,以及这类程序的调试和技巧。实验内容【实验内容】选做其中三个,须在实验报告和源代码中说明所做的是哪几个1、编写一个多进程使用信号通信的程序;2、建立一个父子进程通信管道进行通信和程序;3、构建客户进程和服务进程使用消息进行通信的机制;4、用共享存储区方式实现多个进程的通信。选择了1,2,4。【实验原理】回答以下问题:简述你对信号的认识。信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。可以使用系统自带的信号,用户也可以自己定义。简述你对消息的认识。消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。简述你对管道的认识。管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。4.简述你对共享存储区的认识。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。【实验环境】硬件环境和软件环境笔记本电脑;麒麟版ubuntu14.0.4;【实验过程】按实验要求编写其中3个。 底层的pipe函数,它返回的是文件描述符。int pipe(int pipefd[2]); 参数为大小为2的整形数组(两个文件描述符),pipe调用成功后,这两个文件描述符将被连接,写到pipefd[1]中的数据可以从pipefd[0]中读出,类似pipe常用于父子进程之间传递消息,在pipe调用成功后,再调用fork,父子进程可以一方写,一方读。当不再使用这两个管道时,要对它们close。编写一个多进程使用信号通信的程序gcc ipc_signal.c -o ipc_signal.out./ipc_signal.out#include stdio.h#include unistd.h#include signal.hvoid kill_proc(int a) {printf(进程被kill);kill(getpid(), SIGILL);//kill()函数,向进程发送信号}int main() {pid_t pid; //表示fork函数返回的值pid = fork();//创建进程if(pid 0) printf(创建进程出错!);else if(pid == 0) {printf(子进程,进程id为:%d\n, getpid());while(1) {printf(进程正在处理......\n);sleep(2); //子进程睡眠两秒signal(SIGUSR1, kill_proc);// 会返回以前的信号处理函数的地址}} else {sleep(3);kill(pid, SIGUSR1);printf(父进程id为: %d,并且kill了子进程\n, getpid());}return 0;}父子进程通信管道进行通信gcc ipc_pipe.c -o ipc_pipe.out./ipc_pipe.out#include stdio.h#include unistd.hint main() {int pipefd[2];pid_t pid;char readmess[150];const char writemess[150] = 嘿,我是子进程写入的~;if(pipe(pipefd) != 0) printf(管道出错!\n);pid = fork();if(pid 0) printf(进程创建出错!\n);else if(pid == 0) {printf(子进程,将对管道写入......\n);write(pipefd[1], writemess, 150);close(pipefd[1]); //关闭管道} else {sleep(2);printf(父进程,读取管道信息为: );read(pipefd[0], readmess, 150);printf(%s\n,readmess);close(pipefd[0]);}return 0;}共享存储区方式首先运行ipc_share_write.cpp,创建并将信息写入共享内存。g++ -o ipc_sh
您可能关注的文档
- 编译原理精品教学课件(华南理工大学)第八章静态语义分析和中间代码生成-4.ppt
- 编译原理精品教学课件(华南理工大学)第六章LR分析法.ppt
- 编译原理精品教学课件(华南理工大学)第七章语法制导的语义计算-3.ppt
- 编译原理精品教学课件(华南理工大学)第三章词法分析.pptx
- 编译原理精品教学课件(华南理工大学)第四章自顶向下语法分析方法.ppt
- 编译原理精品教学课件(华南理工大学)综述.ppt
- 编译原理精品教学课件(华南理工大学)第一章编译程序概论.ppt
- 编译原理精品教学课件(华南理工大学)第二章文法和语言.ppt
- 病理生理学精品课件(复旦大学)01 Introduction.ppt
- 病理生理学精品课件(复旦大学)02 Hemodynamic Disorders-1.ppt
文档评论(0)