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