第十章 系統(tǒng)級(jí)I/O

一贿肩、I/O

  1. 對(duì)于Unix系統(tǒng)來說,所有IO設(shè)備龄寞,如磁盤汰规、鼠標(biāo)鍵盤、網(wǎng)卡物邑,一切皆文件溜哮。這樣的一個(gè)好處就是對(duì)于任何東西的輸入輸出,都可以抽象為對(duì)文件的讀和寫操作色解,即I/O茂嗓。
  2. 既然都可以抽象為對(duì)文件的IO操作,操作系統(tǒng)在Unix內(nèi)核上對(duì)外提供了一些Unix I/O調(diào)用科阎,包括open述吸、close、read锣笨、write蝌矛、lseek和stat。
  3. Unix I/O對(duì)于頻繁讀取某個(gè)IO設(shè)備一個(gè)字節(jié)的情景性能較低错英,因此大多數(shù)編程語言基于Unix IO提供了標(biāo)準(zhǔn)IO庫入撒,標(biāo)準(zhǔn)IO庫通過緩沖區(qū)的設(shè)計(jì)解決了頻繁讀取磁盤效率低下的問題。

二椭岩、文件

  1. 文件類型包含文本文件(linux以\n作為換行符)衅金、二進(jìn)制文件噪伊、目錄、套接字(socket)氮唯、命名管道鉴吹、符號(hào)鏈接、塊設(shè)備等惩琉。
  2. 當(dāng)進(jìn)程打開一個(gè)文件時(shí)豆励,如果調(diào)用成功,內(nèi)核返回一個(gè)描述符瞒渠,這個(gè)描述符是一個(gè)非負(fù)整數(shù)良蒸。linux shell創(chuàng)建的每個(gè)進(jìn)程開始時(shí)都有三個(gè)打開的文件:標(biāo)準(zhǔn)輸入(描述符0)、標(biāo)準(zhǔn)輸出(描述符1)伍玖、標(biāo)準(zhǔn)錯(cuò)誤(描述符2)嫩痰。
  3. 關(guān)閉文件時(shí),內(nèi)核會(huì)釋放在打開文件時(shí)創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)窍箍,并將這個(gè)文件描述符恢復(fù)到可用的描述符池中串纺。
  4. 內(nèi)核用三個(gè)數(shù)據(jù)結(jié)構(gòu)表示打開的文件:
    描述符表:每個(gè)進(jìn)程都有自己獨(dú)立的描述符表,表項(xiàng)的key是打開文件時(shí)內(nèi)核返回的描述符fd椰棘,value執(zhí)行文件表中的表項(xiàng)纺棺。
    文件表:被所有進(jìn)程共享,表項(xiàng)中包含當(dāng)前文件位置(讀寫文件時(shí)用到)邪狞、引用計(jì)數(shù)(當(dāng)前被多少個(gè)描述符表引用)祷蝌、一個(gè)指向v-node表的指針。
    v-node表:所有進(jìn)程共享帆卓,每個(gè)表項(xiàng)包含文件stat結(jié)構(gòu)中的大多數(shù)信息巨朦,比如文件大小、文件類型剑令、文件最近被訪問時(shí)間等糊啡。
  5. 一個(gè)進(jìn)程可以通過多個(gè)描述符訪問多個(gè)文件,也可以通過多個(gè)描述符訪問同一個(gè)文件尚洽,當(dāng)訪問同一個(gè)文件時(shí),由于不同文件表的文件位置不同靶累,因此不同文件描述符對(duì)同一個(gè)文件的讀寫互不影響腺毫。
  6. 文件共享:父子進(jìn)程共享文件,是因?yàn)樽舆M(jìn)程復(fù)制了父進(jìn)程的描述符表挣柬,所以父子進(jìn)程實(shí)際都指向了相同的文件表潮酒。
  7. I/O重定向:底層是通過dup2(oldFd, newFd)函數(shù)實(shí)現(xiàn),dup2函數(shù)會(huì)把oldFd表項(xiàng)復(fù)制到newFd表項(xiàng)邪蛔。
    輸出重定向:dup(4, 1)急黎,會(huì)把原本要寫到標(biāo)準(zhǔn)輸出的描述符表項(xiàng)1指向4,因此后續(xù)輸出會(huì)寫到描述符4指向的文件。
    輸入重定向:dup(4, 0)勃教,描述符4會(huì)覆蓋描述符0(標(biāo)準(zhǔn)輸入)淤击,因此原本從標(biāo)準(zhǔn)輸入讀取的操作會(huì)轉(zhuǎn)向從描述符4指向的文件讀取。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末故源,一起剝皮案震驚了整個(gè)濱河市污抬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绳军,老刑警劉巖印机,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異门驾,居然都是意外死亡射赛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門奶是,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楣责,“玉大人,你說我怎么就攤上這事诫隅「辏” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵逐纬,是天一觀的道長(zhǎng)蛔屹。 經(jīng)常有香客問我,道長(zhǎng)豁生,這世上最難降的妖魔是什么兔毒? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮甸箱,結(jié)果婚禮上育叁,老公的妹妹穿的比我還像新娘。我一直安慰自己芍殖,他們只是感情好豪嗽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豌骏,像睡著了一般龟梦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窃躲,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天计贰,我揣著相機(jī)與錄音,去河邊找鬼蒂窒。 笑死躁倒,一個(gè)胖子當(dāng)著我的面吹牛荞怒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秧秉,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼褐桌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了福贞?” 一聲冷哼從身側(cè)響起撩嚼,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挖帘,沒想到半個(gè)月后完丽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拇舀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年逻族,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骄崩。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聘鳞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出要拂,到底是詐尸還是另有隱情抠璃,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布脱惰,位于F島的核電站搏嗡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拉一。R本人自食惡果不足惜采盒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔚润。 院中可真熱鬧磅氨,春花似錦、人聲如沸嫡纠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽除盏。三九已至叉橱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痴颊,已是汗流浹背赏迟。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工屡贺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蠢棱,地道東北人锌杀。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泻仙,于是被迫代替她去往敵國和親糕再。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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