第十章《系統(tǒng)級I/O》

Unix I/O

所有的I/O設(shè)備都被模型化為文件,因此所有的輸入和輸出操作都被當(dāng)做對相應(yīng)文件的讀和寫來執(zhí)行,這種方式稱為Unix I/O,其使得所有的輸入和輸出都能以一種統(tǒng)一且一致的方式來進(jìn)行

文件

包含:

  • 普通文件:又分為文本文件二進(jìn)制文件
  • 目錄:包含一組鏈接的文件,其中每一個(gè)鏈接都將一個(gè)文件名映射到一個(gè)文件,這個(gè)文件還有可能是一個(gè)目錄
  • 套接字:用來與另一個(gè)進(jìn)程進(jìn)行跨網(wǎng)絡(luò)通信的文件

打開文件

通過open函數(shù)來打開一個(gè)已存在的文件或創(chuàng)建一個(gè)新的文件,包含以下幾種方式:

  • O_RDONLY:只讀
  • O_WRONLY:只寫
  • O_RDWR:可讀可寫
  • O_CREAT:如果文件不存在,就創(chuàng)建它的一個(gè)截?cái)辔募?/li>
  • O_TRUNC:如果文件存在,就截?cái)嗨?/li>
  • O_APPEND:在每次寫操作前,設(shè)置文件的位置到文件的結(jié)尾

通過close函數(shù)關(guān)閉一個(gè)打開的文件

讀寫文件

通過read函數(shù)從描述符為fd的當(dāng)前文件位置復(fù)制最多n個(gè)字節(jié)到內(nèi)存位置buf,返回-1表示一個(gè)錯(cuò)誤,而返回0表示EOF,否則返回值表示的是實(shí)際傳送的字節(jié)數(shù)量

通過write函數(shù)從內(nèi)存位置buf復(fù)制最多n個(gè)字符到描述符為fd的當(dāng)前文件位置

共享文件

Linux內(nèi)核用三個(gè)相關(guān)的數(shù)據(jù)結(jié)構(gòu)來表示打開的文件:

  • 描述符表:每個(gè)進(jìn)程都有它獨(dú)立的描述符表,它的表項(xiàng)是由進(jìn)程開發(fā)的文件描述來索引的
  • 文件表:打開文件的集合是由一張文件表來表示的,所有的進(jìn)程共享這張表
  • v-node表:所有的進(jìn)程都共享這張表,每個(gè)表項(xiàng)包含stat結(jié)構(gòu)中的大部分信息

I/O 重定向

I/O 重定向操作符允許用戶將磁盤文件和標(biāo)準(zhǔn)輸入輸出聯(lián)系起來

在代碼中可以使用dup2函數(shù)來實(shí)現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、I/O 對于Unix系統(tǒng)來說,所有IO設(shè)備,如磁盤、鼠標(biāo)鍵盤、網(wǎng)卡,一切皆文件。這樣的一個(gè)好處就是對于任何東西...
    ShutLove閱讀 271評論 0 0
  • 計(jì)算機(jī)系統(tǒng)漫游 代碼從文本到可執(zhí)行文件的過程(c語言示例):預(yù)處理階段,處理 #inlcude , #defin...
    willdimagine閱讀 3,835評論 0 5
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時(shí),會觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,974評論 0 9
  • 結(jié)束了21天的訓(xùn)練營,這是教練給學(xué)員的建議 21天的訓(xùn)練營只是一個(gè)開始, 那么接下去我們應(yīng)該怎么樣去讓成果,更好的...
    最會畫畫的健身教練Danni閱讀 1,003評論 7 2
  • 【0217我在悅讀】蕭蕭 第二次打卡 書名:《終身學(xué)習(xí)》 作者:羅振宇 篇目:第二章 活著就要升級 分享:001我...
    蕭蕭姐閱讀 186評論 0 0

友情鏈接更多精彩內(nèi)容