文件流、目录流、文件描述符总结
文件流、目錄流、文件描述符總結
宗旨:技術的學習是有限的,分享的精神是無限的。
? ? ? ? 內核為使當前進程與進程打開的文件建立聯系,在進程PCB(一個結構體task_struct)中使用一個成員來指向關于打開文件列表的結構體struct file_struct,而該結構體中的struct file *fd_array[]是一個指針數組,指向每個打開的文件信息。內核將這個數組中每個成員的下標值(int 型)傳遞給用戶控件來標識該打開的文件,該值即文件描述符。
? ? ? ? 為了提高執行效率和可移植性,glibc庫在用戶空間申請了一個FILE *結構體對象,該結構體中的一個成員就是對應打開的文件描述符值,即文件流在文件描述符之上的封裝。文件流通過增加緩沖區減少讀寫系統調用次數來提高讀寫效率。
? ? ? ? 目錄流是針對目錄操作而構建的對象。其基本操作類似于文件流操作。
? ? ? ? ANSI文件IO是使用文件流操作,POSIX文件IO是使用文件描述符來操作,文件流是在內核提供的文件描述符基礎上,在進程的用戶空間封裝的FILE結構,以提高可移植性和效率。
| 操作 | 文件流(普通文件) | 目錄流(目錄文件) | 文件描述符 |
| 描述方法 | 文件流指針FILE * | 目錄流指針 DIR * | 文件描述符int |
| 打開 | fopen | opendir | open |
| 讀 | fread/fgets/fgetc | readdir | read |
| 寫 | fwrite/fputs/fputc | 創建文件或目錄 | write |
| 定位 | fseek/ftell/rewind | seekdir/telldir/rewinddir | lseek |
?
總結
以上是生活随笔為你收集整理的文件流、目录流、文件描述符总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i3wm
- 下一篇: 班级抽签小程序——项目总结