欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來到夢飛科技

系統(tǒng)配置

當前優(yōu)惠活動:

關(guān)于Linux文件描寫符fd和文件指針flip的深入理會

簡樸歸納:fd只是一個整數(shù),在open時發(fā)生。起到一個索引的浸染,歷程通過PCB中的文件描寫符表找到該fd所指向的文件指針filp。

文件描寫符的操縱(如: open)返回的是一個文件描寫符,內(nèi)核會在每個歷程空間中維護一個文件描寫符表, 所有打開的文件都將通過此表中的文件描寫符來引用;
而流(如: fopen)返回的是一個FILE布局指針, FILE布局是包括有文件描寫符的,F(xiàn)ILE布局函數(shù)可以看作是對fd直接操縱的系統(tǒng)挪用的封裝, 它的利益是帶有I/O緩存

Linux支持各類百般的文件系統(tǒng)名目,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,差異的磁盤分區(qū)、光盤或其它存儲設(shè)備都有差異的文件系統(tǒng)名目,然而這些文件系統(tǒng)都可以mount到某個目次下,使我們看到一個統(tǒng)一的目次樹,各類文件系統(tǒng)上的目次和文件我們用ls呼吁看起來是一樣的,讀寫操縱用起來也都是一樣的,這是怎么做到的呢?Linux內(nèi)核在各類差異的文件系統(tǒng)名目之上做了一個抽象層,使得文件、目次、讀寫會見等觀念成為抽象層的觀念,因此各類文件系統(tǒng)看起來用起來都一樣,這個抽象層稱為虛擬文件系統(tǒng)(VFS,Virtual Filesystem)。上一節(jié)我們先容了一種典范的文件系統(tǒng)在磁盤上的存儲機關(guān),這一節(jié)我們先容運行時文件系統(tǒng)在內(nèi)核中的暗示。

3.1. 內(nèi)核數(shù)據(jù)布局

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

關(guān)于Linux文件形貌符fd和文件指針flip的深入剖析

每個歷程在PCB(Process Control Block)即歷程節(jié)制塊中都生存著一份文件描寫符表,文件描寫符就是這個表的索引,文件描寫表中每個表項都有一個指向已打開文件的指針,此刻我們明晰一下:已打開的文件在內(nèi)核頂用file布局體暗示,文件描寫符表中的指針指向file布局體。

在file布局體中維護File Status Flag(file布局體的成員f_flags)和當前讀寫位置(file布局體的成員f_pos)。在上圖中,歷程1和歷程2都打開同一文件,可是對應(yīng)差異的file布局體,因此可以有差異的File Status Flag和讀寫位置。file布局體中較量重要的成員尚有f_count,暗示引用計數(shù)(Reference Count),后頭我們會講到,dup、fork等系統(tǒng)挪用會導(dǎo)致多個文件描寫符指向同一個file布局體,譬喻有fd1和fd2都引用同一個file布局體,那么它的引用計數(shù)就是2,當close(fd1)時并不會釋放file布局體,而只是把引用計數(shù)減到1,假如再close(fd2),引用計數(shù)就會減到0同時釋放file布局體,這才真的封鎖了文件。

每個file布局體都指向一個file_operations布局體,這個布局體的成員都是函數(shù)指針,指向?qū)崿F(xiàn)各類文件操縱的內(nèi)核函數(shù)。好比在用戶措施中read一個文件描寫符,read通過系統(tǒng)挪用進入內(nèi)核,然后找到這個文件描寫符所指向的file布局體,找到file布局體所指向的file_operations布局體,挪用它的read成員所指向的內(nèi)核函數(shù)以完成用戶請求。在用戶措施中挪用lseek、read、write、ioctl、open等函數(shù),最終都由內(nèi)核挪用file_operations的各成員所指向的內(nèi)核函數(shù)完成用戶請求。file_operations布局體中的release成員用于完成用戶措施的close請求,之所以叫release而不叫close是因為它不必然真的封鎖文件,而是淘汰引用計數(shù),只有引用計數(shù)減到0才封鎖文件。對付同一個文件系統(tǒng)上打開的通例文件來說,read、write等文件操縱的步和諧要領(lǐng)應(yīng)該是一樣的,挪用的函數(shù)應(yīng)該是溝通的,所以圖中的三個打開文件的file布局體指向同一個file_operations布局體。假如打開一個字符設(shè)備文件,那么它的read、write操縱必定和通例文件紛歧樣,不是讀寫磁盤的數(shù)據(jù)塊而是讀寫硬件設(shè)備,所以file布局體應(yīng)該指向差異的file_operations布局體,個中的各類文件操縱函數(shù)由該設(shè)備的驅(qū)動措施實現(xiàn)。

每個file布局體都有一個指向dentry布局體的指針,“dentry”是directory entry(目次項)的縮寫。我們傳給open、stat等函數(shù)的參數(shù)的是一個路徑,譬喻/home/akaedu/a,需要按照路徑找到文件的inode。為了淘汰讀盤次數(shù),內(nèi)核緩存了目次的樹狀布局,稱為dentry cache,個中每個節(jié)點是一個dentry布局體,只要沿著路徑各部門的dentry搜索即可,從根目次/找到home目次,然后找到akaedu目次,然后找到文件a。dentry cache只生存最近會見過的目次項,假如要找的目次項在cache中沒有,就要從磁盤讀到內(nèi)存中。

每個dentry布局體都有一個指針指向inode布局體。inode布局體生存著從磁盤inode讀上來的信息。在上圖的例子中,有兩個dentry,別離暗示/home/akaedu/a和/home/akaedu/b,它們都指向同一個inode,說明這兩個文件互為硬鏈接。inode布局體中生存著從磁盤分區(qū)的inode讀上來信息,譬喻所有者、文件巨細、文件范例和權(quán)限位等。每個inode布局體都有一個指向inode_operations布局體的指針,后者也是一組函數(shù)指針指向一些完成文件目次操縱的內(nèi)核函數(shù)。和file_operations差異,inode_operations所指向的不是針對某一個文件舉辦操縱的函數(shù),而是影響文件和目次機關(guān)的函數(shù),譬喻添加刪除文件和目次、跟蹤標記鏈接等等,屬于同一文件系統(tǒng)的各inode布局體可以指向同一個inode_operations布局體。

夢飛科技 - 全球數(shù)據(jù)中心基礎(chǔ)服務(wù)領(lǐng)先供應(yīng)商

Copyright © 2003-2019 MFISP.COM. 國外服務(wù)器租用 IDC公司 版權(quán)所有 ? 粵ICP備11019662號

主站蜘蛛池模板: 华亭县| 江津市| 鹤岗市| 林周县| 平罗县| 嵊州市| 邵阳县| 陕西省| 靖远县| 济阳县| 登封市| 广元市| 西昌市| 萝北县| 沙雅县| 隆子县| 开原市| 大洼县| 金堂县| 长泰县| 温宿县| 金华市| 谷城县| 定襄县| 麻江县| 宁波市| 墨竹工卡县| 浦东新区| 翁牛特旗| 台东市| 长汀县| 许昌县| 镶黄旗| 慈利县| 伊宁市| 山阴县| 平乐县| 天全县| 五华县| 渑池县| 宣武区|