文件描述符
访问量:2755

一、简介

在linux系统中,一切皆为文件,但文件有分为:普通文件、目录文件、软(硬)连接和设备文件。文件描述符(file descriptor)是内核为了高效管理已经打开的文件而创建的索引,即用来快速访问打开的文件,是一个非负整数,每一个文件描述符都会与一个打开的文件相对应。其中,0代表标准输入,1代表标准输出;2代表标准错误。文件描述符,是linux系统中一个重要的资源,虽说系统内存有多少,就可以打开多少文件描述符,但是内核一般会做相应的限制,打开的文件数是内存的10%(以KB来计算)。我们可以通过如下命令,来查询系统允许的最大打开文件个数:

sysctl -a |grep fs.file-max

处理通过上面的命令查看,我们也可以直接查看“/proc/sys/fs/file-max ”文件内容,里面记录了系统允许的最大打开文件个数。

cat /proc/sys/fs/file-max

当然,内核为了不让某一个进程消耗掉所有的文件资源,也会对单个进程最大打开文件数做默认值处理(即用户级限制),默认值一般是1024,可以通过如下命令查看:

ulimit -n

二、文件描述符与打开的文件的关系

系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。

进程的文件描述符并不是直接指向硬盘中的文件,它是指向了系统级的文件描述符,系统级的文件描述符指向了文件系统的i-node表。文件系统的i-node表,里面存在了文件在硬盘中的地址。如下:



参考:《Linux-UNIX系统编程手册》