文件描述符:
文件描述符的分配原則:最小未分配原則
- 每一個進程中有一個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操作內核中的文件流指針