加载中...
文件描述符是操作系统分配给进程用于标识已打开文件或输入输出资源的非负整数。它是Unix系统中一切皆文件理念的具体体现,统一了对文件、管道、套接字等资源的访问。

| 本质 | 非负整数索引 |
| 标准三项 | 0/1/2 |
| 所属 | 进程级表 |
| 设计理念 | 一切皆文件 |
文件描述符是内核为进程打开的每个文件或输入输出对象分配的非负整数索引。进程通过这个整数引用底层资源,内核则用它作为下标在进程的文件描述符表中找到对应的打开文件项。它是Unix系统中访问文件、管道、套接字等资源的统一句柄。
在Unix哲学中一切皆文件,无论是磁盘文件、终端、管道还是网络套接字,进程都用同一套读写接口操作,而文件描述符就是这套接口的抽象凭证。每个进程启动时默认拥有标准输入、标准输出、标准错误三个描述符,编号分别为0、1、2,之后每打开一个资源就分配一个当前最小可用的整数。
命令行的输入输出重定向和管道正是通过操作文件描述符实现的,例如把标准输出重定向到文件就是让描述符1指向该文件。网络编程中accept返回新连接的描述符,epoll监听大量描述符的就绪状态,这些都以文件描述符为核心。
问:文件描述符和文件指针有什么区别?答:文件描述符是内核层的整数,直接用于系统调用;文件指针是C标准库在描述符之上封装的带缓冲的高层抽象,内部仍持有一个描述符。
问:描述符用完不关闭会怎样?答:会造成描述符泄漏,进程可用描述符逐渐耗尽,最终打开新文件或接受连接失败。长期运行的服务尤其要注意及时关闭不再使用的描述符。

| 本质 | 非负整数索引 |
| 标准三项 | 0/1/2 |
| 所属 | 进程级表 |
| 设计理念 | 一切皆文件 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧