第四章:管道与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[2]); // 返回:若成功则为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:小结

原文地址:https://www.cnblogs.com/lit10050528/p/5472403.html