文件描述符定义
文件描述符:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O 操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的文件是 0,第二个是 1,依此类推。也可以理解为是一个文件的身份 ID。
用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)如表 11-1 所示。
图 11-1 交互设备文件
1. 输入输出标准说明,如图 11-2 所示。
STDIN 标准输入,默认的设备是键盘,文件编号为:0。
STDOUT 标准输出,默认的设备是显示器,文件编号为:1,也可以重定向到文件。
STDERR 标准错误,默认的设备是显示器,文件编号为:2,也可以重定向到文件。
图 11-2 输入输出标准
2. 查看一个进程打开了哪些文件。
语法: ll /proc/进程 ID/fd #其中进程 ID 需要换成对应的程序 ID 号。
例 1:查看 vim 进程打开了哪些文件。
# vim /etc/passwd #打开 vim 程序。
# ps -axu | grep passwd #在另一个终端查看 vim 进程 ID 号。
root 4602 2.1 0.2 151600 5300 pts/2 S+ 15:30 0:00 vim /etc/passwd
# ll /proc/4602/fd #查看打开的文件。
总用量 0
lrwx------ 1 root root 64 5 月 14 15:30 0 -> /dev/pts/2
lrwx------ 1 root root 64 5 月 14 15:30 1 -> /dev/pts/2
lrwx------ 1 root root 64 5 月 14 15:30 2 -> /dev/pts/2
lrwx------ 1 root root 64 5 月 14 15:30 4 -> /etc/.passwd.swp
注: 这些 0,1,2,4 就是文件的描述符。一个进程启动时,都会打开 3 个文件:标准输入、标准输出和标准出错处理。这 3 个文件分别对应文件描述符为 0、1 和 2 也就是宏替换 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO。
/proc/进程 ID/fd #其中进程 ID 为对应进程的 PID 号,这个 fd 目录下,专门存文件描述符。
注:对文件描述符的操作就是对文件本身的操作,我可以直接通过操作文件描述来修改文件。
例 2:查看和临时设置一个进程最多可以打开几个文件,即:一个进程可以打开的文件描述符限制。
[root@xuegod63 ~]# ulimit -n #查看一个进程最多可以同时打开的文件数。
1024
[root@xuegod63 ~]# ulimit -n 2048 #修改一个进程最多可以同时打开的文件数为 2048。
[root@xuegod63 ~]# ulimit -n
2048
永久修改,会在第三阶段讲系统调优时详解讲解。