文件描述符

每一個文件描述符會與一個打開文件相對應(yīng)并蝗,同時,不同的文件描述符也會指向同一個文件秸妥。相同的文件可以被不同的進程打開也可以在同一個進程中被多次打開滚停。系統(tǒng)為每一個進程維護了一個文件描述符表,該表的值都是從0開始的粥惧,所以在不同的進程中你會看到相同的文件描述符键畴,這種情況下相同文件描述符有可能指向同一個文件,也有可能指向不同的文件。具體情況要具體分析起惕,要理解具體其概況如何涡贱,需要查看由內(nèi)核維護的3個數(shù)據(jù)結(jié)構(gòu)。

  • 進程級的文件描述符表
  • 系統(tǒng)級的打開文件描述符表
  • 文件系統(tǒng)的i-node表

進程級的文件描述符表

進程級的描述符表的每一條目記錄了單個文件描述符的相關(guān)信息惹想。

  1. 控制文件描述符操作的一組標(biāo)志问词。(目前,此類標(biāo)志僅定義了一個嘀粱,即close-on-exec標(biāo)志)
  2. 對打開文件句柄的引用

系統(tǒng)級的描述符表格(open file description table)

內(nèi)核對所有打開的文件的文件維護有一個系統(tǒng)級的描述符表格(open file description table)激挪。有時,也稱之為打開文件表(open file table)锋叨,并將表格中各條目稱為打開文件句柄(open file handle)垄分。一個打開文件句柄存儲了與一個打開文件相關(guān)的全部信息,如下所示:

  1. 當(dāng)前文件偏移量(調(diào)用read()和write()時更新娃磺,或使用lseek()直接修改)
  2. 打開文件時所使用的狀態(tài)標(biāo)識(即薄湿,open()的flags參數(shù))
  3. 文件訪問模式(如調(diào)用open()時所設(shè)置的只讀模式、只寫模式或讀寫模式)
  4. 與信號驅(qū)動相關(guān)的設(shè)置
  5. 對該文件i-node對象的引用
  6. 文件類型(例如:常規(guī)文件豌鸡、套接字或FIFO)和訪問權(quán)限
  7. 一個指針嘿般,指向該文件所持有的鎖列表
  8. 文件的各種屬性段标,包括文件大小以及與不同類型操作相關(guān)的時間戳

下圖展示了文件描述符涯冠、打開的文件句柄以及i-node之間的關(guān)系,圖中逼庞,兩個進程擁有諸多打開的文件描述符蛇更。


在進程A中,文件描述符1和30都指向了同一個打開的文件句柄(標(biāo)號23)赛糟。這可能是通過調(diào)用dup()派任、dup2()、fcntl()或者對同一個文件多次調(diào)用了open()函數(shù)而形成的璧南。
進程A的文件描述符2和進程B的文件描述符2都指向了同一個打開的文件句柄(標(biāo)號73)掌逛。這種情形可能是在調(diào)用fork()后出現(xiàn)的(即,進程A司倚、B是父子進程關(guān)系)豆混,或者當(dāng)某進程通過UNIX域套接字將一個打開的文件描述符傳遞給另一個進程時,也會發(fā)生动知。再者是不同的進程獨自去調(diào)用open函數(shù)打開了同一個文件皿伺,此時進程內(nèi)部的描述符正好分配到與其他進程打開該文件的描述符一樣。
此外盒粮,進程A的描述符0和進程B的描述符3分別指向不同的打開文件句柄鸵鸥,但這些句柄均指向i-node表的相同條目(1976),換言之丹皱,指向同一個文件妒穴。發(fā)生這種情況是因為每個進程各自對同一個文件發(fā)起了open()調(diào)用宋税。同一個進程兩次打開同一個文件,也會發(fā)生類似情況宰翅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弃甥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子汁讼,更是在濱河造成了極大的恐慌淆攻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘿架,死亡現(xiàn)場離奇詭異瓶珊,居然都是意外死亡,警方通過查閱死者的電腦和手機耸彪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門伞芹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝉娜,你說我怎么就攤上這事唱较。” “怎么了召川?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵南缓,是天一觀的道長。 經(jīng)常有香客問我荧呐,道長汉形,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任倍阐,我火速辦了婚禮概疆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峰搪。我一直安慰自己岔冀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布概耻。 她就那樣靜靜地躺著使套,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咐蚯。 梳的紋絲不亂的頭發(fā)上童漩,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音春锋,去河邊找鬼矫膨。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侧馅。 我是一名探鬼主播危尿,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馁痴!你這毒婦竟也來了谊娇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤罗晕,失蹤者是張志新(化名)和其女友劉穎济欢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體小渊,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡法褥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酬屉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片半等。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呐萨,靈堂內(nèi)的尸體忽然破棺而出杀饵,到底是詐尸還是另有隱情,我是刑警寧澤谬擦,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布切距,位于F島的核電站,受9級特大地震影響怯屉,放射性物質(zhì)發(fā)生泄漏蔚舀。R本人自食惡果不足惜饵沧,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一锨络、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狼牺,春花似錦羡儿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悄泥,卻和暖如春虏冻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弹囚。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工厨相, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓蛮穿,卻偏偏與公主長得像庶骄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子践磅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容