Pipe 子例程

用途

创建进程间通道。

标准 C 库 (libc.a)

语法

#include <unistd.h>
int pipe ( FileDescriptor)
int FileDescriptor[2];

描述

pipe 子例程创建一个称为管道的进程间通道,并返回两个文件描述符: FileDescriptor[0] FileDescriptor[1]FileDescriptor[0] 打开以进行读取, FileDescriptor[1] 打开以进行写入。

FileDescriptor[0] 参数上的读操作以先进先出 (FIFO) 的方式访问写入 FileDescriptor[1] 参数的数据。

不会将 PIPE_BUF 字节或更少的写请求与来自在同一管道上执行写操作的其他进程的数据交错 (混合)。 PIPE_BUFpathconf 子例程中描述的系统变量。 大于 PIPE_BUF 字节的写入可能具有在任意边界上与其他写入交织的数据。

如果设置了 O_NONBLOCKO_NDELAY ,则 PIPE_BUF 字节或更少的写入请求要么会完全成功,要么会失败,并返回 -1 和设置为 EAGAINerrno 全局变量。 如果写入请求超过 PIPE_BUF 字节,要么传输所能传输的数据并返回实际写入的字节数,要么不传输数据并返回 -1 ,同时将 Erno 全局变量设置为 EAGAIN

参数

表 1. 参数
描述
FileDescriptor 指定放置新文件描述符的两个整数的数组的地址。

返回值

成功完成后,将返回值 0。 否则,将返回 -1 的值,并设置 errno 全局变量来标识错误。

错误代码

如果下列一项或多项为 true ,那么 pipe 子例程将失败:

表 2。 错误代码
描述
EFAULT FileDescriptor 参数指向进程的已分配地址空间外部的位置。
EMFILE 文件描述符的打开次数超过了 OPEN_MAX 值。
ENFILE 系统文件表已满,或者包含管道的设备没有可用索引节点。