第四章:管道与FIFO
4.1:概述
管道是最初的Unix IPC形式,可追溯到1973年的Unix第三版。尽管对于许多操作来说很有用,但它们的根本局限在于没有名字,从而只能由亲缘关系的进程使用。这一点随FIFO的加入得改正。
本章讲述管道和FIFO的创建与使用。我们使用一个简单的文件服务器例子,同时查看一些客户-服务器程序设计问题:IPC通道需要量、迭代服务器与并发服务器、字节流与消息接口。
4.2:一个简单的客户-服务器例子
下图所示的客户-服务器例子在本章和第六章中都要用,我们用它来分析说明管道、FIFO和System V消息队列。
图中客户从标准输入(stdin)读进一个路径名,并把它写入IPC通道。服务器从该IPC通道读出这个路径名,并尝试打开其文件来读。如果服务器能打开该文件,它就读出其中的内容,并写入IPC通道,以作为对客户的相应;否则,它就响应以一个出错消息。
4.3:管道
所有的Unix都提供管道,它由pipe函数创建,提供一个单向数据流。
#include <unistd.h>
int pipe(int fd[]); // 返回:若成功则为0,若出错则为-1
该函数返回两个文件描述符:fd[0]和fd[1],前者打开来读,后者打开来写。
管道的典型用途是以下述方式为两个不同进程(一个是父进程,一个是子进程)提供进程间的通信手段。首先由一个进程(它将成为父进程)创建一个管道后调用fork派生一个自身的副本,接着,父进程关闭这个管道的读出端(fd[0]),子进程关闭同一管道的写入端(fd[1]),这样就在父子进程间提供了一个单向数据流。如果要实现双向的数据流,则需要使用两个管道。
4.4:全双工管道
用两个半双工管道来实现。
4.5:popen和pclose
4.6:FIFO
FIFO即有名管道。
4.7:管道和FIFO的额外属性
4.8:单个服务器,多个客户
4.9:对比迭代服务器和并发服务器
4.10:字节流和消息
4.11:管道和FIFO限制
4.12:小结
第四章:管道与FIFO的更多相关文章
- 第4章 管道和FIFO
4.1 管道 管道是由pipe函数创建的,提供一个单向数据流. 头文件 #include <unistd.h> 函数原型 int pipe(int fd[2]); 返回值 成功则为0,出错 ...
- 第4章 管道与FIFO
4.1 概述 管道只在亲缘进程间使用,FIFO在任意进程间使用 4.2 管道 #include <unistd.h> ]) fd[0]用来读管道,fd[1]用来写管道 1)命令who | ...
- 第十四章:高级I/O
14.1:引言 本章内容包括非阻塞I/O.记录锁.系统V流机制.I/O多路转接(select和poll函数).readv和writev函数以及存储映射I/O(mmap),这些都称为高级I/O. 14. ...
- 《APUE》第四章笔记(1)
1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...
- 管道和FIFO 一
管道和FIFO 管道(pipe) 管道在Unix及Linux进程间通信是最基础的,很容易理解.管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动.管道 ...
- 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...
- linux进程间通信-有名管道(FIFO)
有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的 ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- java并发编程的艺术——第四章总结
第四章并发编程基础 4.1线程简介 4.2启动与终止线程 4.3线程间通信 4.4线程应用实例 java语言是内置对多线程支持的. 为什么使用多线程: 首先线程是操作系统最小的调度单元,多核心.多个线 ...
随机推荐
- 关于Java擦除特性
package thinkingInJava; /* * 模拟擦除 */ public class SimpleHolder { private Object obj ; public void se ...
- Window7 驱动编程环境配置
1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1) 2. 新建VC 控制台项目(选择为空项目) 3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器) 输 ...
- Final-阶段站立会议5
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- 关于怎样解决eclipse打开时出现的Failed to load the JNIshared library亲测有效
之前一直可以正常使用eclipse但是当我装了Oracle后打开后就出现了Failed to load the JNIshared library(下面还出现了一个jvm.dll的文件路径),当时就蒙 ...
- ModelAndView学习整理
ModelAndView mav = new ModelAndView("/media/play-video");是什么意思 1.这是SpringMVC里面的问题啊!2.这叫返回一 ...
- Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总
Unit06 - 抽象类.接口和内部类(下) . 面向对象汇总 1.多态: 1)意义: 1.1)同一类型的引用指向不同的对象时,有不同的实现 行为的多态:cut().run(). ...
- java学习规划
今天在网上看到一位大学生的java学习线路规划,觉得蛮适合我,就详细阅读了一下,规划路线应该适用于大部分学习java语言的人,贴出来与大家共勉. 在学习的过程中,不能急于去学习更多的知识,因为知识是无 ...
- Java Servlet(八):EL自定义函数
EL自定义函数:在EL表达式中调用的某个java类的静态方法,这个静态方法需在web应用程序中进行配置才可以被EL表达式调用. EL自定义函数可以扩展EL表达式的功能,让EL表达式完成普通java程序 ...
- Linux下使用shell实现上传linux下某个目录下所有文件到ftp
首先我们需要搞清楚单个文件怎么上传,把这个单文件上传到ftp上的实现命名为一个:upload_to_ftp_command.sh 之后,需要弄清楚怎么实现遍历一个目录下的所有文件的,把这个遍历某个目录 ...
- SD卡读写遇到的一些函数
SD_SPI_ReadWriteByte(0XFF): 你的数据线写0xff,就是一直保持高,clk就有了8个,可以说只是发送的数据是0xff,这又不是SD的命令,但是它必须要靠控制器提供时钟才能工作 ...