从数值上看,文件描述符是一个非负整数,其本质就是一个句柄,所以也可以认为文件描述符就是一个文件句柄。那么何为句柄呢?一切对于用户透明的返回值,即可视为句柄。用户空间利用文件描述符与内核进行交互;而内核拿到文件描述符后,可以通过它得到用于管理文件的真正的数据结构。
??使用文件描述符即句柄,有两个好处:一是增加了安全性,句柄类型对用户完全透明,用户无法通过任何hacking的方式,更改句柄对用的内部结果,比如Linux内核的文件描述符,只有内核才能通过该值得到相应的文件结构;二是增加了可扩展性,用户的代码只依赖于句柄的值,这样实际的结构的类型就可以随时发生变化,与句柄的映射关系也可以随时改变,这些变化都不回影响任何现有的用户代码。
??Linux的每个进程都会维护一个文件表,以便维护该进程打开的文件信息,包括打开的文件的个数、每个文件的偏移量等信息。