管道与先进先出队列(FIFOs)的深入解析与应用
1. 客户端 - 服务器示例概述
在客户端 - 服务器通信模型中,客户端会从标准输入读取路径名,并将其发送到进程间通信(IPC)通道。之后,客户端会从该 IPC 通道读取数据,并将接收到的内容写入标准输出。若服务器无法读取指定文件,客户端会从 IPC 通道读取错误消息;若能读取,客户端则会读取文件内容。
2. 管道(Pipes)
2.1 管道的基本概念
所有版本的 Unix 系统都提供了管道机制。管道由 pipe 函数创建,提供单向(半双工)的数据流动。
#include <unistd.h>
int pipe (int fd[2]);
// Returns: 0 if OK, -1 on error
该函数会返回两个文件描述符: fd[0] 用于读取, fd[1] 用于写入。部分 Unix 版本(如 SVR4)提供全双工管道,即两端均可进行读写操作。另一种创建全双工 IPC 通道的方法是使用 socketpair 函数。不过,管道最常见的用途是在各种 shell 中,此时半双工管道就已足够。Posix.1 和 Unix 98 仅要求支持半双工管道。
2.2 管道的使用场景
2.2.1 单进程中的管道
虽然管道由一个进程创建,但在单个进程中使用的情况较为少见。管道通常用于两个不同进程(如父进程和子进
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



