在使用有名管道(Named Pipe,FIFO)时,返回的文件描述符 3 和 4 是通过 open()
系统调用打开有名管道后分配的文件描述符。文件描述符是进程用来访问打开的文件或管道的整数标识符。
1. 文件描述符的分配规则
-
文件描述符是一个非负整数,通常是当前进程未使用的最小整数。
-
默认情况下,每个进程已经打开了三个标准的文件描述符:
-
0
:标准输入(stdin) -
1
:标准输出(stdout) -
2
:标准错误(stderr)
-
-
因此,当进程第一次打开一个文件或管道时,通常会分配文件描述符 3,第二次打开时会分配 4,依此类推。
2. 有名管道返回 3 和 4 的场景
假设一个进程通过 open()
系统调用两次打开同一个有名管道:
int fd1 = open("/tmp/my_fifo", O_RDONLY); // 返回 3
int fd2 = open("/tmp/my_fifo", O_WRONLY); // 返回 4
-
第一次调用
open()
时,返回的文件描述符是 3,因为 0、1、2 已经被标准输入、输