Linux文件描述符操作概述
發(fā)布時(shí)間:2021-12-24 10:57:30
當(dāng)看到最后一個(gè)文件描述符被關(guān)閉的時(shí)候,kill進(jìn)程對(duì)我說:還有什么要交代的么?我搖了搖頭。隨著kill進(jìn)程的手起刀落,一切歸于混沌……
我是一個(gè)Linux用戶級(jí)進(jìn)程,編號(hào)9527。
自從我的父親bash產(chǎn)生我之后,我獨(dú)自占用了一個(gè)終端(偽終端),并且產(chǎn)生我的進(jìn)程bash因?yàn)橛脩舻膬?yōu)化而提前結(jié)束,使得我成了孤兒(孤兒進(jìn)程),我于是被祖先進(jìn)程領(lǐng)養(yǎng)。
作為整個(gè)進(jìn)程家族中最小的一輩,集萬千寵愛與一身,基本什么事都不用做,唯一的功能就是測(cè)試等待用戶請(qǐng)求并和操作系統(tǒng)交互。百無聊賴的我漸漸的打起了瞌睡。
“快醒醒!“一陣急促的提示消息把我從掛起隊(duì)列中喚醒。
“怎么了?”我問。
“用戶請(qǐng)求來了”負(fù)責(zé)調(diào)度任務(wù)的操作系統(tǒng)大哥帶著冷漠的電子口音對(duì)我說。
嗯,終于來活了。
緊接著,操作系統(tǒng)遞給了我一個(gè)紙片,上面寫著3。
“這是什么?”我又問。
“這叫文件描述符,專門用于訪問文件的?!辈僮飨到y(tǒng)顯然以前經(jīng)?;卮疬@種問題,面無表情的快速說出了答案。
“哦,我想起來的,我出生的時(shí)候我爸bash進(jìn)程給了我三個(gè)卡片,上面寫著0,1,2”,我好像有點(diǎn)明白了。
“是,不過那三個(gè)是用于訪問輸入輸出設(shè)備的,現(xiàn)在你手上這張是打開了一個(gè)普通的文件的”,操作系統(tǒng)回答道,依然是那種機(jī)械性的,冷冰冰的語氣。
“輸入和輸出能用數(shù)字,普通文件也要用數(shù)字,為什么你們這么懶?”我?guī)е唤夥磫柕溃半y道不能專門給輸入輸出一個(gè)方式,普通文件另一個(gè)方式么?”
“沒必要”,操作系統(tǒng)笑了笑。他笑了,他居然會(huì)笑!
“Linux中凡是能夠進(jìn)行數(shù)據(jù)的寫入和讀取的東西,無論什么,我們都會(huì)統(tǒng)一的管理。稱之為文件,在Linux世界中,一切都是文件”。很顯然,操作系統(tǒng)對(duì)我們的造物主的設(shè)計(jì)邏輯充滿的敬佩。
“我持有這樣的數(shù)字居然能打開文件”,我仔細(xì)端詳著手中帶有數(shù)字的金屬卡片,它在CPU的電子脈沖中發(fā)出了點(diǎn)點(diǎn)熒光。
“是,但不全是”,操作系統(tǒng)糾正我道?!?strong>你是一個(gè)普通的進(jìn)程,并不能夠直接訪問到文件本身,需要通過我間接的訪問文件”。
“每個(gè)進(jìn)程有自己的打開文件的描述符表。其中每個(gè)條目都記錄了單個(gè)文件描述符的相關(guān)信息,針對(duì)所有打開的文件,內(nèi)核有一個(gè)系統(tǒng)級(jí)的描述表,其中每個(gè)條目稱為打開文件句柄,存儲(chǔ)了與一個(gè)打開文件相關(guān)的全部信息,每個(gè)文件系統(tǒng)都會(huì)為其中所有文件建立一個(gè)inode表。其中條目為文件的inode信息”。
“也就是說我手中的這個(gè)數(shù)字卡片只有你能識(shí)別”,我問道。
“沒錯(cuò),而且是所有的用戶進(jìn)程的文件描述符都只有我能識(shí)別,并且只能通過我識(shí)別”,操作系統(tǒng)的眼中閃出了一絲傲嬌的光輝。
他接著說“這是由于我的管理,不同的用戶級(jí)進(jìn)程可以打開同樣文件,每個(gè)進(jìn)程也可以打開不同的文件”。
這時(shí),用戶的請(qǐng)求已經(jīng)從緩沖區(qū)中取了出來,要求我用3號(hào)卡片讀取文件中的內(nèi)容并使用1號(hào)卡片輸出到終端。
“常見日志打印操作”,操作系統(tǒng)向我解釋道?!斑@是開發(fā)用戶經(jīng)常性的操作,將日志文件的內(nèi)容打印出來,并查看他們管理的系統(tǒng)是否有問題?!?/p>
“哦,這樣子”,經(jīng)過了幾次循環(huán)讀取并打印后,我漸漸明白了文件描述符的工作原理。經(jīng)過了幾個(gè)時(shí)間片輪轉(zhuǎn)后,我的操作也是得心應(yīng)手。
突然,我手中的卡片漸漸消失,從0號(hào)開始,1號(hào),2號(hào),最后是三號(hào)。我不解的望向操作系統(tǒng)。
“看來是打印任務(wù)完畢,用戶通過日志找到問題所在了,需要關(guān)掉你這個(gè)進(jìn)程,讓出終端”,操作系統(tǒng)不敢看我的眼睛。
“不是吧,僅僅是打印了幾次數(shù)據(jù),就要關(guān)掉我,而且我還掌握著這個(gè)文件呢?”,作為整個(gè)進(jìn)程家族中最小的我大為不解。
“沒辦法,你的任務(wù)到此為止了,需要釋放資源,放心吧,即使你被關(guān)掉了,bash依然會(huì)產(chǎn)生新的進(jìn)程完成對(duì)于文件的操作”。
這時(shí),操作系統(tǒng)調(diào)來了kill進(jìn)程,他是專門用于關(guān)閉進(jìn)程的殺手。Kill進(jìn)程皺著眉頭對(duì)我說:“別害怕,很快的”。
當(dāng)看到最后一個(gè)文件描述符被關(guān)閉的時(shí)候,kill進(jìn)程問我:還有什么要交代的么?我搖了搖頭。隨著kill進(jìn)程的手起刀落,一切歸于混沌……
關(guān)于Linux文件描述符操作概述的介紹就到這里啦,感謝盛圖科技文學(xué)大家楊老師的創(chuàng)作,相信大家通過這樣簡(jiǎn)單生動(dòng)的描寫一定都對(duì)Linux文件描述符操作有了更直觀的認(rèn)知吧
- 上一篇:機(jī)械臂的廣泛應(yīng)用
- 下一篇:程序員編程入門須知