文件描述符(File Descriptor, FD)是 类 Unix 操作系统 中用于 访问文件或其他 I/O 资源抽象句柄(Handle)

在 Linux 的世界里,“一切皆文件”。当你打开一个文件、创建一个 Socket 或建立一个管道时,内核都会返回一个非负整数,这个整数就是 FD。

核心机制

  1. 内核索引:FD 本质上是进程级别“打开文件表”的索引。内核通过这个下标找到对应的虚拟文件系统 (VFS) 节点。
  2. 进程局部性:FD 是 进程私有 的。同一个数字(如 FD 3)在不同进程中指向的资源通常不同。
  3. 资源统一化:FD 抹平了硬件差异,无论是硬盘文件还是网络流,都通过统一的 read/write 接口操作。

标准 FD

每个进程启动时,内核都会默认打开三个 FD:

FD 值符号常量名称默认关联
0STDIN_FILENO标准输入 (Standard Input)终端键盘
1STDOUT_FILENO标准输出 (Standard Output)终端屏幕
2STDERR_FILENO标准错误 (Standard Error)终端屏幕

资源管理

FD 是有限的资源(受 ulimit 限制)。如果程序打开文件后忘记关闭,会导致 FD 泄漏,最终引发 Too many open files 错误。