每一次打开一个文件时候,这个进程(操作系统进程)内部都会产生一个与文件相对应的一个数据结构,这个结构里面通常存放一些操作这个文件的所有属性,例如文件读取到那个位置,所以里面肯定会有个POS值,当有很多文件打开的时候,自然就会有很多类似的数据结构来存储文件的属性信息,然后,这个所有的数据结构又会全部存放在一个数组里面,每个数组元素的值就是数据文件结构的位置,当然如果有两个操作都打开同一个文件,那么就会有连个不同的索引值,指向同一个文件结构体。而数组的每个元素的位置就叫做“文件描述符”即0,1,2,3,4········
因此,当我们Open()一个文件的时候,就会创建这样类似的一个数据结构,然后上层程序就可以通过文件描述符来找到文件结构体,然后通过文件结构体来操作具体的文件目标。然后这些数据结构什么时候消失呢?就是在我们调用close()方法的时候,就会自动删除这些数据关系,因此,我们在进行IO操作的时候经常要要求进行数据流关闭,其实就是让操作系统删除掉文件描述符对应的这些数据结构。
总结,要想对一个文件进行操作,必须拿到这个文件对应的文件描述符,而这些操作都可以通过调用操作系统API获取。