Pipe 子例程
用途
创建进程间通道。
库
标准 C 库 (libc.a)
语法
#include <unistd.h> int pipe ( FileDescriptor)
int FileDescriptor[2];
int FileDescriptor[2];
描述
管道子程序创建一个名为管道的进程间通道,并返回两个文件描述符 FileDescriptor[0]和 FileDescriptor[1]。 FileDescriptor[0]打开用于读取,FileDescriptor[1]打开用于写入。
FileDescriptor[0]参数上的读操作以先进先出(FIFO)方式访问写入FileDescriptor[1]参数的数据。
PIPE_BUF字节或更少的写入请求不会与在同一管道上写入的其他进程的数据交错(混合)。 PIPE_BUF是pathconf子程序中描述的一个系统变量。 大于PIPE_BUF字节的写入数据可能与其他写入数据在任意边界上交错。
如果设置了O_NONBLOCK或O_NDELAY,则PIPE_BUF字节或更少的写入请求要么完全成功,要么失败并返回-1且全局变量errno设置为EAGAIN。 超过 PIPE_BUF字节的写入请求,要么传输所能传输的数据并返回实际写入的字节数,要么不传输任何数据并返回-1且全局变量errno设为EAGAIN。
参数
| 项 | 描述 |
|---|---|
| FileDescriptor | 指定放置新文件描述符的两个整数的数组的地址。 |
返回值
成功完成后,将返回值 0。 否则,返回值为-1,并设置errno全局变量来标识错误。
错误代码
如果以下情况之一或多个为真,则管道子程序不成功:
| 项 | 描述 |
|---|---|
| EFAULT | FileDescriptor 参数指向进程的已分配地址空间外部的位置。 |
| EMFILE | 文件描述符的打开次数超过OPEN_MAX值。 |
| ENFILE | 系统文件表已满,或者包含管道的设备没有可用索引节点。 |