Skip to content
基础

一句话答案

文件描述符是内核为每个打开文件/Socket 分配的非负整数索引(0=stdin/1=stdout/2=stderr),是进程访问 IO 的句柄。

核心要点

标准fd: 0(stdin) / 1(stdout) / 2(stderr)

限制: ulimit -n 查看/设置单进程最大 fd 数(默认1024,生产需调大)

与网络编程: 每个 Socket 连接占一个 fd,epoll 监听 fd 的就绪事件

追问与易错

追问方向:

  • fd 耗尽会怎样?
  • 怎么调大 fd 限制?
  • socket 和 fd 关系?

易错点:

  • ❌ 默认 1024 个 fd 够用——高并发需调到几十万
  • ❌ fd 和 inode 一样——fd 是进程级索引

💡 记忆锚点

fd像酒店房卡号:内核给每个打开的文件/Socket发一个编号(非负整数),0/1/2是VIP房(stdin/stdout/stderr),你拿着房卡号才能操作对应的IO。默认最多1024张房卡(ulimit -n),高并发服务器要调到几十万,不然客人(连接)进不来。epoll就是管这些房卡的前台系统。