欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第九章 管道.ppt

    • 资源ID:67189158       资源大小:185.50KB        全文页数:21页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第九章 管道.ppt

    管道进程间通信概述无名管道命名管道进程间通信进程间通信(IPC:Inter Processes Communication)进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信。进程间通信功能:数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。无名管道管道(pipe)又称无名管道。无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。管道是最古老的UNIX IPC方式,其特点是:1、半双工,数据在同一时刻只能在一个方向上流动。2、数据只能从管道的一端写入,从另一端读出。3、写入管道中的数据遵循先入先出的规则。4、管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。5、管道不是普通的文件,不属于某个文件系统,其只存在于内存中。6、管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。7、从管道读数据是一次性操作,数据一旦被读走,它就从管道中被抛弃,释放空间以便写更多的数据。8、管道没有名字,只能在具有公共祖先的进程之间使用。Pipe函数#include int pipe(int filedes2);功能:经由参数filedes返回两个文件描述符参数:filedes为int型数组的首地址,其存放了管道的文件描述符fd0、fd1。filedes0为读而打开,filedes1为写而打开管道,filedes0的输出是filedes1的输入。返回值:成功:返回0失败:返回-1父子进程通过管道实现数据的传输01_pipe_1.c 子进程写入管道 父进程从管道中读取从管道中读数据的特点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打开一个文件时,内核会返回一个文件描述符。每个进程都有一张文件描述符的表,进程刚被创建时,标准输入、标准输出、标准错误输出设备文件被打开,对应的文件描述符0、1、2 记录在表中。在进程中打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,并将此文件描述符记录在表中。注意:Linux中一个进程最多只能打开NR_OPEN_DEFAULT(即1024)个文件,故当文件不再使用时应及时调用close函数关闭文件。练习题目:实现ls-help|more 功能提示:ls-help是个外部命令,它向标准输出打印ls的帮助文档。more是个外部命令,它默认是从标准输入中获取输入,并分屏显示到屏幕上。在使用shell命令时,可使用管道“”将两个命令连接起来。用管道“”将两个命令连接后:提示:创建一个管道以便让ls-help的输出和more的输入可以联系起来。子进程exec执行ls-help命令之前重定向“标准输出”到“管道写端”。父进程exec执行more命令之前重定向“标准输入”到“管道读端”。命名管道命名管道(FIFO)和管道(pipe)基本相同,但也有一些显著的不同,其特点是:1、半双工,数据在同一时刻只能在一个方向上流动。2、写入FIFO中的数据遵循先入先出的规则。3、FIFO所传送的数据是无格式的,这要求FIFO的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。4、FIFO在文件系统中作为一个特殊的文件而存在,但FIFO中的内容却存放在内存中。5、管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。6、从FIFO读数据是一次性操作,数据一旦被读,它就从FIFO中被抛弃,释放空间以便写更多的数据。7、当使用FIFO的进程退出后,FIFO文件将继续保存在文件系统中以便以后使用。8、FIFO有名字,不相关的进程可以通过打开命名管道进行通信。FIFO文件的创建#include#include int mkfifo(const char*pathname,mode_t mode);参数:pathname:FIFO的路径名+文件名。mode:mode_t类型的权限描述符。返回值:成功:返回0失败:如果文件已经存在,则会出错且返回-1。有名管道操作FIFO文件时的特点系统调用的I/O函数都可以作用于FIFO,如open、close、read、write等。打开FIFO时,非阻塞标志(O_NONBLOCK)产生下列影响:特点一:不指定O_NONBLOCK(即open没有位或O_NONBLOCK)1、open以只读方式打开FIFO时,要阻塞到某个进程为写而打开此FIFO2、open以只写方式打开FIFO时,要阻塞到某个进程为读而打开此FIFO。3、open以只读、只写方式打开FIFO时会阻塞,调用read函数从FIFO里读数据时read也会阻塞。4、通信过程中若写进程先退出了,则调用read函数从FIFO里读数据时不阻塞;若写进程又重新运行,则调用read函数从FIFO里读数据时又恢复阻塞。5、通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会(收到SIGPIPE信号)退出。6、调用write函数向FIFO里写数据,当缓冲区已满时write也会阻塞。02_fifo_read_1.c 从管道中读取02_fifo_write_1.c 写入管道练习题目:实现单机QQ聊天提示:父进程创建子进程,实现多任务。父进程负责发信息(向FIFO里写数据),子进程负责接收信息(从FIFO里读数据)。打开命名管道的用阻塞的方法打开。QQ聊天框架及流程图

    注意事项

    本文(第九章 管道.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开