第九章 管道.ppt
《第九章 管道.ppt》由会员分享,可在线阅读,更多相关《第九章 管道.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、管道进程间通信概述无名管道命名管道进程间通信进程间通信(IPC:Inter Processes Communication)进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信。进程间通信功能:数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。进程控制:有些进程希望完全控制另一个进程的执行(
2、如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。无名管道管道(pipe)又称无名管道。无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。管道是最古老的UNIX IPC方式,其特点是:1、半双工,数据在同一时刻只能在一个方向上流动。2、数据只能从管道的一端写入,从另一端读出。3、写入管道中的数据遵循先入先出的规则。4、管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。5、管道不是普通的文件,不属于某个文件系统,其只存在于内存中。6、管道在内存中对应一个缓冲区。不同的系统其大小不一定
3、相同。7、从管道读数据是一次性操作,数据一旦被读走,它就从管道中被抛弃,释放空间以便写更多的数据。8、管道没有名字,只能在具有公共祖先的进程之间使用。Pipe函数#include int pipe(int filedes2);功能:经由参数filedes返回两个文件描述符参数:filedes为int型数组的首地址,其存放了管道的文件描述符fd0、fd1。filedes0为读而打开,filedes1为写而打开管道,filedes0的输出是filedes1的输入。返回值:成功:返回0失败:返回-1父子进程通过管道实现数据的传输01_pipe_1.c 子进程写入管道 父进程从管道中读取从管道中读数据
4、的特点1、默认用read函数从管道中读数据是阻塞的。2、调用write函数向管道里写数据,当缓冲区已满时write也会阻塞。3、编程时可通过fcntl函数设置文件的阻塞特性。设置为阻塞:fcntl(fd,F_SETFL,0);设置为非阻塞:fcntl(fd,F_SETFL,O_NONBLOCK);01_pipe_2.c带阻塞和不带阻塞文件描述符概述文件描述符是非负整数,是文件的标识。用户使用文件描述符(file descriptor)来访问文件。利用open打开一个文件时,内核会返回一个文件描述符。每个进程都有一张文件描述符的表,进程刚被创建时,标准输入、标准输出、标准错误输出设备文件被打开,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九章 管道 第九
限制150内