欢迎来到天天文库
浏览记录
ID:40850235
大小:209.50 KB
页数:25页
时间:2019-08-08
《linux进程之间的通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、进程之间的通信2021/8/12Linux内核源代码导读21、实验目的为了理解和掌握UNIX和Linux进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。实验目的和要求2021/8/12Linux内核源代码导读32、实验要求书写实验报告,应该包括如下内容:(1)实验题目。(2)程序中使用的数据结构及主要符号说明。(3)程序流程图和带有注释的源程序。(4)执行程序名,并打印程序运行时的初值和运行结果。(5)通过实验后的收获与体会及对实验的改进意见和见解。。
2、实验目的和要求2021/8/12Linux内核源代码导读4通过使用管道实现两个或多个进程之间的通信。所谓管道,就是将一个进程的标准输出与另一个进程的标准输入联系在一起,进行通信的一种方法。同组进程之间可用无名和有名管道进行通信,而不同组进程之间只能通过有名管道进行通信。管道通信是进程之间使用文件系统中的文件,按先进先出方式进行同步传输数据的方法。例如,管道在Linux命令行中的应用如下:$ls
3、sort
4、head-5进程之间管道通信机制2021/8/12Linux内核源代码导读5该命令行实现将当前目录的文件列表、排序,且只输出前5行。一、无名管道通信1、创建无名管道的p
5、ipe()函数pipe()函数成功时,内核将返回打开文件的两个描述字。一个作为管道的输入端,另一个作为管道的输出端。(1)pipe()函数调用格式如下:#includeintpipe(intfdes[2]);进程之间管道通信机制2021/8/12Linux内核源代码导读6参数:fdes[2]数组存放返回的两个文件描述符。返回值:正确返回0,错误返回-1。使用无名管道通信时,是使用临时文件的方式实现进程之间的批量数据传输。若通信双方不是父子关系,不能直接建立通信联系。必须由父进程先创建一个管道,再创建需要通信的两个子进程,两者是通过复制父进程映像使两者
6、建立联系的。(2)无名管道pipe()的使用示例使用无名管道pipe(),父子进程之间的通信的源程序如下:进程之间管道通信机制2021/8/12Linux内核源代码导读7/*pipe.c源程序*/#include#include#include#includeconstcharparent[]=“Amessagetopipe’scommunicaton.”main(){intpid,w_n,r_n,chan1[2];charbuf[BUFSIZE];pipe(chan1);pid=f
7、ork();if(pid<0){printf(“tocreatechilderror.”);exit(1);}进程之间管道通信机制2021/8/12Linux内核源代码导读8if(pid>0){close(chan1[0]);/*父进程关闭读通道*/w_n=write(chan1[1],parent,strlen(parent));close(chan1[1]);printf(“parentprocesswaitsthechildtoterminate.”);wait(0);printf(“parentprocessterminates.”);}else{c
8、lose(chan1[1]);/*子进程关闭写通道*/r_n=read(chan1[0],buf,BUFSIZE);printf(“Themessagereadbychildprocessis:%s.read’sbytesis%d.”,buf,r_n);close(chan1[0]);printf(“childprocessterminates.”);}}进程之间管道通信机制2021/8/12Linux内核源代码导读9当父进程首先被调用时,该程序运行结果是:parentprocesssends46bytesmessagetochild.parentprocess
9、waitschildtoterminate.然后父进程阻塞等待子进程终止。系统调用子进程运行,输出如下信息:Themessagereadbychildprocessis:Amessagetopipe’scommunication.Read’sbytesis46.childprocessterminates.然后父进程被唤醒调度运行,输出如下信息后程序退出:parentprocessterminates.进程之间管道通信机制2021/8/12Linux内核源代码导读10本例中,父进程使用pipe(chan1)系统调用打开一个无名管道,之后创
此文档下载收益归作者所有