文件句柄与文件描述符
文章,解释为什么lsof和proc/sys/fs/file-nr有数量级差异:
https://mp.weixin.qq.com/s/3B1Or4Y-rTRZ0_0shPxhBQ
file-nr文件里面的第一个字段代表的是内核分配的struct file的个数,也就是文件句柄个数,而不是文件描述符。
lsof显示对是文件描述符。
名词解释
文件描述符(file descriptor):
内核(kernel)利用文件描述符(file descriptor)来访问文件。 文件描述符是非负整数。 打开现存文件或新建文件时,内核会返回一个文件描述符。 读写文件也需要使用文件描述符来指定待读写的文件。
文件句柄(file handle):
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。
可以看作文件描述符指向具体文件句柄,文件句柄指向要操作对文件。