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的更多相关文章

  1. 第4章 管道和FIFO

    4.1 管道 管道是由pipe函数创建的,提供一个单向数据流. 头文件 #include <unistd.h> 函数原型 int pipe(int fd[2]); 返回值 成功则为0,出错 ...

  2. 第4章 管道与FIFO

    4.1 概述 管道只在亲缘进程间使用,FIFO在任意进程间使用 4.2 管道 #include <unistd.h> ]) fd[0]用来读管道,fd[1]用来写管道 1)命令who |  ...

  3. 第十四章:高级I/O

    14.1:引言 本章内容包括非阻塞I/O.记录锁.系统V流机制.I/O多路转接(select和poll函数).readv和writev函数以及存储映射I/O(mmap),这些都称为高级I/O. 14. ...

  4. 《APUE》第四章笔记(1)

    1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...

  5. 管道和FIFO 一

    管道和FIFO   管道(pipe)       管道在Unix及Linux进程间通信是最基础的,很容易理解.管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动.管道 ...

  6. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

  7. linux进程间通信-有名管道(FIFO)

    有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的 ...

  8. 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记

    第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...

  9. java并发编程的艺术——第四章总结

    第四章并发编程基础 4.1线程简介 4.2启动与终止线程 4.3线程间通信 4.4线程应用实例 java语言是内置对多线程支持的. 为什么使用多线程: 首先线程是操作系统最小的调度单元,多核心.多个线 ...

随机推荐

  1. HTTPS协议简介

    一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...

  2. 【HDU 2853】 KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现 ...

  3. div自定义的滚动条 (竖直导航条)

    <style type="text/css"> .scrollBar { width: 10px; background-color: #daa520; positio ...

  4. flume+elasticsearch

    项目的日志服是使用flume+elasticsearch 但是运维大哥告诉我,经常会大量往外发包,以至流量超标.问我是不是程序有问题.当时我拍着胸膛说:肯定不是.他说,可能是 服务器被攻击了,让我换一 ...

  5. # 20145334赵文豪 《Java程序设计》第5周学习总结

    20145334赵文豪 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.使用try.catch打包System.in.read(),声明throws java.io.IO ...

  6. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

  7. [转载] Windows + IIS + PHP 配置

    资源下载: 下载windwos版本的PHP:http://windows.php.net/download/ (我下载的是PHP5.4.9_VC9 x86 Non Thread Safe,下载地址:h ...

  8. Sqlserver2008和Oracle分页语句

    SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...

  9. [转]MongoDB密码设置(基于windows)

    参考文档:http://www.cnblogs.com/zengen/archive/2011/04/23/2025722.html   MongoDB部署到Windows上后是默认是无权限限制的的. ...

  10. jqGrid使用记录

    一.要引用的文件 要使用jqGrid,首先页面上要引入如下css与js文件. 1.css <link href="/css/ui.jqgrid.css" rel=" ...