文件描述符(File Descriptor, FD)是 类 Unix 操作系统 中用于 访问文件或其他 I/O 资源 的 抽象句柄(Handle)。
在 Linux 的世界里,“一切皆文件”。当你打开一个文件、创建一个 Socket 或建立一个管道时,内核都会返回一个非负整数,这个整数就是 FD。
核心机制
- 内核索引:FD 本质上是进程级别“打开文件表”的索引。内核通过这个下标找到对应的虚拟文件系统 (VFS) 节点。
- 进程局部性:FD 是 进程私有 的。同一个数字(如 FD 3)在不同进程中指向的资源通常不同。
- 资源统一化:FD 抹平了硬件差异,无论是硬盘文件还是网络流,都通过统一的
read/write接口操作。
标准 FD
每个进程启动时,内核都会默认打开三个 FD:
| FD 值 | 符号常量 | 名称 | 默认关联 |
|---|---|---|---|
| 0 | STDIN_FILENO | 标准输入 (Standard Input) | 终端键盘 |
| 1 | STDOUT_FILENO | 标准输出 (Standard Output) | 终端屏幕 |
| 2 | STDERR_FILENO | 标准错误 (Standard Error) | 终端屏幕 |
资源管理
FD 是有限的资源(受 ulimit 限制)。如果程序打开文件后忘记关闭,会导致 FD 泄漏,最终引发 Too many open files 错误。