1. 文件描述符(重點(diǎn))

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

1.1概念介紹

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

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

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

1.2圖表解釋

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),后面我們會(huì)講到,dupfork等系統(tǒng)調(diào)用會(huì)導(dǎo)致多個(gè)文件描述符指向同一個(gè)file結(jié)構(gòu)體,例如有fd1fd2都引用同一個(gè)file結(jié)構(gòu)體,那么它的引用計(jì)數(shù)就是2,當(dāng)close(fd1)時(shí)并不會(huì)釋放file結(jié)構(gòu)體,而只是把引用計(jì)數(shù)減到1,如果再

網(wǎng)友評(píng)論