- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux进程之间的通信
Linux内核源代码导读 进程之间的通信 * Linux内核源代码导读 * 1、实验目的 为了理解和掌握UNIX和Linux进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。 实验目的和要求 * Linux内核源代码导读 * 2、实验要求 书写实验报告,应该包括如下内容: (1)实验题目。 (2)程序中使用的数据结构及主要符号说明。 (3)程序流程图和带有注释的源程序。 (4)执行程序名,并打印程序运行时的初值和运行结果。 (5)通过实验后的收获与体会及对实验的改进意见和见解。。 实验目的和要求 * Linux内核源代码导读 * 通过使用管道实现两个或多个进程之间的通信。所谓管道,就是将一个进程的标准输出与另一个进程的标准输入联系在一起,进行通信的一种方法。同组进程之间可用无名和有名管道进行通信,而不同组进程之间只能通过有名管道进行通信。 管道通信是进程之间使用文件系统中的文件,按先进先出方式进行同步传输数据的方法。例如,管道在Linux命令行中的应用如下: $ls|sort|head -5 进程之间管道通信机制 * Linux内核源代码导读 * 该命令行实现将当前目录的文件列表、排序,且只输出前5行。 一、无名管道通信 1、创建无名管道的pipe()函数 pipe()函数成功时,内核将返回打开文件的两个描述字。一个作为管道的输入端,另一个作为管道的输出端。 (1)pipe()函数调用格式如下: #includeunistd.h int pipe(int fdes[2]); 进程之间管道通信机制 * Linux内核源代码导读 * 参数:fdes[2]数组存放返回的两个文件描述符。 返回值:正确返回0,错误返回-1。 使用无名管道通信时,是使用临时文件的方式实现进程之间的批量数据传输。若通信双方不是父子关系,不能直接建立通信联系。必须由父进程先创建一个管道,再创建需要通信的两个子进程,两者是通过复制父进程映像使两者建立联系的。 (2)无名管道pipe()的使用示例 使用无名管道pipe(),父子进程之间的通信的源程序如下: 进程之间管道通信机制 * Linux内核源代码导读 * /* pipe.c源程序*/ #includeunistd.h #includesys/types.h #includestdio.h #includestdlib.h const char parent[]=“A message to pipe’s communicaton.\n” main() { int pid, w_n, r_n,chan1[2]; char buf[BUFSIZE]; pipe(chan1); pid=fork(); if(pid0) { printf(“to create child error.\n”); exit(1); } 进程之间管道通信机制 * Linux内核源代码导读 * if(pid0) { close(chan1[0]); /*父进程关闭读通道*/ w_n=write(chan1[1],parent,strlen(parent)); close(chan1[1]); printf(“parent process waits the child to terminate.\n”); wait(0); printf(“parent process terminates.\n”); }else{ close(chan1[1]); /*子进程关闭写通道*/ r_n=read(chan1[0],buf,BUFSIZE); printf(“The message read by child process is :%s. read’s bytes is %d.\n”, buf, r_n); close(chan1[0]); printf(“child process terminates.\n”); } } 进程之间管道通信机制 * Linux内核源代码导读 * 当父进程首先被调用时,该程序运行结果是: parent process sends 46 bytes message to child. parent process waits child to terminate.
文档评论(0)