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