1. 文件描述符(重點)

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

1.1概念介紹

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

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

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

1.2圖表解釋

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

網(wǎng)友評論