色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 什么是文件描述符

什么是文件描述符 時間:2018-09-25      來源:未知

Linux內核在各種不同的文件系統格式之上做了一個抽象層,使得文件、目錄、讀寫訪問等概念成為抽象層的概念,因此各種文件系統看起來用起來都一樣,這個抽象層稱為虛擬文件系統(VFS,Virtual Filesystem)。

內核數據結構

Linux內核的VFS子系統可以圖示如下:

每個進程在PCB(Process Control Block)中都保存著一份文件描述符表,文件描述符就是這個表的索引,每個表項都有一個指向已打開文件的指針,現在我們明確一下:已打開的文件在內核中用file結構體表示,文件描述符表中的指針指向file結構體。

在file結構體中維護File Status Flag(file結構體的成員f_flags)和當前讀寫位置(file結構體的成員f_pos)。在上圖中,進程1和進程2都打開同一文件,但是對應不同的file結構體,因此可以有不同的File Status Flag和讀寫位置。file結構體中比較重要的成員還有f_count,表示引用計數(Reference Count),fork等系統調用會導致多個文件描述符指向同一個file結構體,例如有fd1和fd2都引用同一個file結構體,那么它的引用計數就是2,當close(fd1)時并不會釋放file結構體,而只是把引用計數減到1,如果再close(fd2),引用計數就會減到0同時釋放file結構體,這才真的關閉了文件。

每個file結構體都指向一個file_operations結構體,這個結構體的成員都是函數指針,指向實現各種文件操作的內核函數。比如在用戶程序中read一個文件描述符,read通過系統調用進入內核,然后找到這個文件描述符所指向的file結構體,找到file結構體所指向的file_operations結構體,調用它的read成員所指向的內核函數以完成用戶請求。在用戶程序中調用lseek、read、write、ioctl、open等函數,終都由內核調用file_operations的各成員所指向的內核函數完成用戶請求。file_operations結構體中的release成員用于完成用戶程序的close請求,之所以叫release而不叫close是因為它不一定真的關閉文件,而是減少引用計數,只有引用計數減到0才關閉文件。對于同一個文件系統上打開的常規文件來說,read、write等文件操作的步驟和方法應該是一樣的,調用的函數應該是相同的,所以圖中的三個打開文件的file結構體指向同一個file_operations結構體。如果打開一個字符設備文件,那么它的read、write操作肯定和常規文件不一樣,不是讀寫磁盤的數據塊而是讀寫硬件設備,所以file結構體應該指向不同的file_operations結構體,其中的各種文件操作函數由該設備的驅動程序實現。

每個file結構體都有一個指向dentry(目錄項)結構體的指針,我們傳給open、stat等函數的參數是一個路徑,例如/home/akaedu/a,需要根據路徑找到文件的inode。為了減少讀盤次數,內核緩存了目錄的樹狀結構,稱為dentry cache,其中每個節點是一個dentry結構體,只要沿著路徑各部分的dentry搜索即可,從根目錄/找到home目錄,然后找到akaedu目錄,然后找到文件a。dentry cache只保存近訪問過的目錄項,如果要找的目錄項在cache中沒有,就要從磁盤讀到內存中。

每個dentry結構體都有一個指針指向inode結構體。inode結構體中保存著從磁盤分區的inode讀上來信息,例如所有者、inode節點、文件大小、文件類型和權限位等。我們通過ln命令創建的硬鏈接就是使不同的dentry中的結構體指針指向同一個inode結構體而已。每個inode結構體都有一個指向inode_operations結構體的指針,后者也是一組函數指針指向一些完成文件目錄操作的內核函數。和file_operations不同,inode_operations所指向的不是針對某一個文件進行操作的函數,而是影響文件和目錄布局的函數,例如添加刪除文件和目錄、跟蹤符號鏈接等等,屬于同一文件系統的各inode結構體可以指向同一個inode_operations結構體。

inode結構體有一個指向super_block結構體的指針。super_block結構體保存著從磁盤分區的超級塊讀上來的信息,例如文件系統類型、塊大小等。

上一篇:OpenWrt之mips交叉編譯鏈配置

下一篇:大神修煉第一步

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5,京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 日韩精品在线私人| 欧美超级乱淫片喷水| 日韩中文字幕在线播放| 日韩欧美国产视频| 成人免费网站在线观看| 亚洲色无码播放| 97国产一区二区精品久久呦| 亚洲伊人一本大道中文字幕| 最近中文字幕日韩精品| 欧美又大又硬又粗bbbbb| 日韩高清电影免费观看完整版| 久久伊人色综合| 国产精品久久久久久久久久99| 一区二区亚洲欧洲国产日韩| 午夜精品一区二区三区视频免费看| 91精品国产自产在线| 美女黄色丝袜一区| 国产精品对白刺激| 久久天天躁狠狠躁夜夜躁| 国产精品色午夜在线观看| 欧美成人精品三级在线观看| 国产中文字幕亚洲| 欧美性xxxx极品hd满灌| 亚洲精品一区久久久久久| 777777777亚洲妇女| 影音先锋欧美在线资源| 国产精品黄视频| 欧美日韩午夜剧场| 亚洲国产精品免费| 青青草99啪国产免费| 久久伊人精品一区二区三区| 亚洲精品电影在线观看| 欧美一区二区视频97| 精品国内产的精品视频在线观看| 国产日本欧美一区| 欧美黄色片免费观看| 亚洲精品在线视频| 国产日韩专区在线| 69影院欧美专区视频| 久久色在线播放| 亚洲人a成www在线影院|