文件描述符:
文件描述符的分配原则:最小未分配原则
- 每一个进程中有一个task_struct结构体(PCB),而task_struct中含有struct file_sturct*file的指针,该指针指向了一个struct files_struct的结构体
- 该结构体中含有一个fd_array的数组,每一个数组的元素是一个struct_file*;
- 而这个数组的下标叫做文件描述符,每一个元素都指向 了struc_file结构体
- 该结构体保存了文件的原信息,包括文件大小,inode节点号,文件时间等等信息
而文件描述符的分配方式是找到当前没有被使用的最小的下标分配给新文件
当close(0)关闭下标为0的元素,该文件按就会放在0的位置
文件流指针与文件描述符的区别:
文件流指针FILE是一个重命名的结构体(struct _IO_FILE),该结构体中含有三个重要的变量:
写缓冲区:
- 这里的缓冲区与exit函数所刷新的缓冲区是同一个东西
- printf函数把需要输出的内容都放在缓冲区中,加上换行符就是让在换行时刷新缓冲区
- fileno将内容输入到文件或者屏幕上
int _fileno
- 保存了文件描述符
- 在通过库函数操作文件流指针的本质就是通过fileno操作内核中的文件流指针