色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 什么是文件描述符

什么是文件描述符 時(shí)間:2018-09-25      來(lái)源:未知

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

內(nèi)核數(shù)據(jù)結(jié)構(gòu)

Linux內(nèi)核的VFS子系統(tǒng)可以圖示如下:

每個(gè)進(jìn)程在PCB(Process Control Block)中都保存著一份文件描述符表,文件描述符就是這個(gè)表的索引,每個(gè)表項(xiàng)都有一個(gè)指向已打開(kāi)文件的指針,現(xiàn)在我們明確一下:已打開(kāi)的文件在內(nèi)核中用file結(jié)構(gòu)體表示,文件描述符表中的指針指向file結(jié)構(gòu)體。

在file結(jié)構(gòu)體中維護(hù)File Status Flag(file結(jié)構(gòu)體的成員f_flags)和當(dāng)前讀寫(xiě)位置(file結(jié)構(gòu)體的成員f_pos)。在上圖中,進(jìn)程1和進(jìn)程2都打開(kāi)同一文件,但是對(duì)應(yīng)不同的file結(jié)構(gòu)體,因此可以有不同的File Status Flag和讀寫(xiě)位置。file結(jié)構(gòu)體中比較重要的成員還有f_count,表示引用計(jì)數(shù)(Reference Count),fork等系統(tǒng)調(diào)用會(huì)導(dǎo)致多個(gè)文件描述符指向同一個(gè)file結(jié)構(gòu)體,例如有fd1和fd2都引用同一個(gè)file結(jié)構(gòu)體,那么它的引用計(jì)數(shù)就是2,當(dāng)close(fd1)時(shí)并不會(huì)釋放file結(jié)構(gòu)體,而只是把引用計(jì)數(shù)減到1,如果再close(fd2),引用計(jì)數(shù)就會(huì)減到0同時(shí)釋放file結(jié)構(gòu)體,這才真的關(guān)閉了文件。

每個(gè)file結(jié)構(gòu)體都指向一個(gè)file_operations結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體的成員都是函數(shù)指針,指向?qū)崿F(xiàn)各種文件操作的內(nèi)核函數(shù)。比如在用戶程序中read一個(gè)文件描述符,read通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核,然后找到這個(gè)文件描述符所指向的file結(jié)構(gòu)體,找到file結(jié)構(gòu)體所指向的file_operations結(jié)構(gòu)體,調(diào)用它的read成員所指向的內(nèi)核函數(shù)以完成用戶請(qǐng)求。在用戶程序中調(diào)用lseek、read、write、ioctl、open等函數(shù),終都由內(nèi)核調(diào)用file_operations的各成員所指向的內(nèi)核函數(shù)完成用戶請(qǐng)求。file_operations結(jié)構(gòu)體中的release成員用于完成用戶程序的close請(qǐng)求,之所以叫release而不叫close是因?yàn)樗灰欢ㄕ娴年P(guān)閉文件,而是減少引用計(jì)數(shù),只有引用計(jì)數(shù)減到0才關(guān)閉文件。對(duì)于同一個(gè)文件系統(tǒng)上打開(kāi)的常規(guī)文件來(lái)說(shuō),read、write等文件操作的步驟和方法應(yīng)該是一樣的,調(diào)用的函數(shù)應(yīng)該是相同的,所以圖中的三個(gè)打開(kāi)文件的file結(jié)構(gòu)體指向同一個(gè)file_operations結(jié)構(gòu)體。如果打開(kāi)一個(gè)字符設(shè)備文件,那么它的read、write操作肯定和常規(guī)文件不一樣,不是讀寫(xiě)磁盤(pán)的數(shù)據(jù)塊而是讀寫(xiě)硬件設(shè)備,所以file結(jié)構(gòu)體應(yīng)該指向不同的file_operations結(jié)構(gòu)體,其中的各種文件操作函數(shù)由該設(shè)備的驅(qū)動(dòng)程序?qū)崿F(xiàn)。

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

每個(gè)dentry結(jié)構(gòu)體都有一個(gè)指針指向inode結(jié)構(gòu)體。inode結(jié)構(gòu)體中保存著從磁盤(pán)分區(qū)的inode讀上來(lái)信息,例如所有者、inode節(jié)點(diǎn)、文件大小、文件類(lèi)型和權(quán)限位等。我們通過(guò)ln命令創(chuàng)建的硬鏈接就是使不同的dentry中的結(jié)構(gòu)體指針指向同一個(gè)inode結(jié)構(gòu)體而已。每個(gè)inode結(jié)構(gòu)體都有一個(gè)指向inode_operations結(jié)構(gòu)體的指針,后者也是一組函數(shù)指針指向一些完成文件目錄操作的內(nèi)核函數(shù)。和file_operations不同,inode_operations所指向的不是針對(duì)某一個(gè)文件進(jìn)行操作的函數(shù),而是影響文件和目錄布局的函數(shù),例如添加刪除文件和目錄、跟蹤符號(hào)鏈接等等,屬于同一文件系統(tǒng)的各inode結(jié)構(gòu)體可以指向同一個(gè)inode_operations結(jié)構(gòu)體。

inode結(jié)構(gòu)體有一個(gè)指向super_block結(jié)構(gòu)體的指針。super_block結(jié)構(gòu)體保存著從磁盤(pán)分區(qū)的超級(jí)塊讀上來(lái)的信息,例如文件系統(tǒng)類(lèi)型、塊大小等。

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

下一篇:大神修煉第一步

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 精品传媒一区二区三区A片 亚洲AV综合色区无码专区桃色 | 色帝国亚洲欧美在线 | 被医生绑在妇科椅调教 | 在线看片免费人成视频无毒 | 欧美精品系列产品 | 精品无码成人网站久久久久久 | 在线看片免费人成视频播 | 少妇特黄V一区二区三区 | 无码丰满熟妇juliaann | 裸体超大乳抖乳露双乳呻吟 | 绯色一区二区二区av免费 | 亚洲一区蜜桃 | 在线视频免费观看 | 国产精品久久久久久婷婷 | 18禁夜色福利院在线播放 | 两个女人互添下身高潮视频 | 亚洲女同精品一区二区久久 | 亚洲精品AV一区午夜福利 | 办公室娇喘的短裙老师 | 99热门精品一区二区三区无码 | aaa222成人黄网 | FREE性丰满HD毛多多 | 99精品免视看 | 强奷乱码中文字幕熟女导航 | 粉嫩少妇内射浓精VIDEOS | a级毛片不卡在线播放 | 秋霞人成在线观看免费视频 | 色五月丁香五月综合五月4438 | 国产乱精品一区二区三区 | 美女裸体永久免费视频网站 | 国产69精品麻豆久久久久 | 欧美又粗又猛又爽又黄A片 亚洲国产成人va在线观看 | 麻豆视频播放 | 亚洲熟妇少妇任你躁在线观看 | 欧美激情综合亚洲一二区 | 日本丶国产丶欧美色综合 | 欧美性xxxxx极品 | av在线天堂av无码舔b | 中文字幕 制服 亚洲 另类 | 精品久久久久久国产潘金莲 | 啊灬啊灬啊灬快灬高潮少妇a片 |