1. 文件描述符(重點)

在Linux系統(tǒng)中一切皆可以看成是文件,文件又可分為:普通文件、目錄文件、鏈接文件和設(shè)備文件。文件描述符(file descriptor)是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,其是一個非負(fù)整數(shù)(通常是小整數(shù)),用于指代被打開的文件,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符。程序剛剛啟動的時候,0是標(biāo)準(zhǔn)輸入,1是標(biāo)準(zhǔn)輸出,2是標(biāo)準(zhǔn)錯誤。如果此時去打開一個新的文件,它的文件描述符會是3。

1.1概念介紹

文件描述符的操作(如: open(),creat(),close(),read()))返回的是一個文件描述符,它是int類型的整數(shù),即fd,其本質(zhì)是文件描述符表中的下標(biāo),它起到一個索引的作用,進程通過PCB中的文件描述符表找到該fd所指向的文件指針filp。每個進程在PCB(Process Control Block)即進程控制塊中都保存著一份文件描述符表,文件描述符就是這個表的索引,文件描述表中每個表項都有一個指向已打開文件的指針; 已打開的文件在內(nèi)核中用file結(jié)構(gòu)體表示,文件描述符表中的指針指向file結(jié)構(gòu)體。每打開一個文件,fd默認(rèn)從最小的未被使用的下標(biāo)開始分配。文件描述符的缺點:不能移植到UNIX以外的系統(tǒng)上去,也不直觀。

下面畫張圖來表示它們之間的關(guān)系:大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計算培訓(xùn),高端軟件開發(fā)培訓(xùn),項目經(jīng)理培訓(xùn)

 而每個文件中又主要包含以下這些信息:大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計算培訓(xùn),高端軟件開發(fā)培訓(xùn),項目經(jīng)理培訓(xùn)

1.2圖表解釋

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

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式