一、文件描述符
首先要明确一点,在linux系统中一切都可以看成是文件,你的文档是文件、程序是文件、设备也是文件、显示屏、键盘、网口都可以看做是文件,而且在linux中也确确实实是这样。而文件又可分为:普通文件、目录文件、链接文件和设备文件。
文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都要通过文件描述符进行操作。
一个进程默认打开3个文件描述符:
STDIN_FILENO 0
STDOUT_FILENO 1
STDERR_FILENO 2
POSIX标准规定:新打开文件返回文件描述符表中未使用的最小文件描述符。
二、最大文件打开个数
在编写文件操作的或者网络通信的软件时,可能会遇到“Too many open files”的问题。这主要是因为文件描述符是系统的一个重要资源,虽然说系统内存有多少就可以打开多少的文件描述符,但是在实际实现过程中内核是会做相应的处理的,一般最大打开文件数会是系统内存的10%(以KB来计算)(称之为系统级限制),查看系统级别的最大打开文件数可以使用cat /proc/sys/fs/file-max命令查看。
相关命令介绍:
查看当前系统允许打开最大文件个数
cat /proc/sys/fs/file-max
当前默认设置最大打开文件个数1024
查看修改限制命令的使用方法
ulimit -a
修改默认设置最大打开文件个数为4096
ulimit -n 4096