CSAPP 第10章 系統級IO

2021-10-19 11:11:02 字數 1719 閱讀 1355

10.6 讀取檔案元資料

10.7 讀取目錄的內容

10.8 共享檔案

10.9 io重定向

10.10 標準io

10.11 綜合:我該使用哪些io函式?

10.1 unix io

linux shell 建立的每個程序開始時都有三個開啟的檔案:

改變當前的檔案位置

讀寫檔案

關閉檔案。

10.2 檔案

目錄(directory)

可以用 mkdir 命令建立乙個目錄,用 is 檢視其內容,用 rmdir 刪除該目錄。

套接字(socket)

linux 核心將所有檔案都組織成乙個目錄層次結構(directory hierarchy),下圖顯示了linux 系統的目錄層次結構的一部分。

絕對路徑名(relative pathname)

10.3 開啟和關閉檔案

mode 引數指定了新檔案的訪問許可權,而每個程序可通過umask函式來設定使用者預設許可權的補碼,則檔案最終的許可權是通過mode & ~umask確定的。

最後,程序通過呼叫 close 函式關閉乙個開啟的檔案。

10.4 讀和寫檔案

write 函式從記憶體位置 buf 複製至多 個位元組到描述符 fd 的當前檔案位置

在某些情況下,read 和 write 傳送的位元組比應用程式要求的要少(不足值問題)

從終端讀文字行。

讀和寫網路套接字(socket)。

在x86-64中,size_t被定義為unsigned long,而 ssize_t被定義為long。

10.5 用rio包健壯地讀寫

帶緩衝的輸入函式。

10.5.1 rio 的無緩衝的輸入輸出函式

實現:

10.5.2 rio 的帶緩衝的輸入函式

rio_readnb

緩衝區格式

typedef

struct

rio_t;

void

rio_readinitb

(rio_t *rp,

int fd)

10.6 讀取檔案元資料

其中st_size包含了檔案的位元組數大小

st_mode編碼了檔案訪問許可位,我們可以通過sys/stat.h中定義的巨集來確定該部分的資訊:

10.7 讀取目錄的內容

10.8 共享檔案

檔案表(file table)。

v-node 表(v-node table)。

此三者結構:

10.9 io重定向

10.10 標準io

標準 i/o 庫將乙個開啟的檔案模型化為乙個流。對於程式設計師而言,乙個流就是乙個指向 file 型別的結構的指標。每個 ansi c 程式開始時都有三個開啟的流 stdin、stdout和 stderr,分別對應於標準輸人、標準輸出和標準錯誤

10.11 綜合:我該使用哪些io函式?

函式選用標準\建議

g3: 對網路套接字的 i/o 使用 rio 函式。

對於標準io來說,一般認為是全雙工的,除以下兩種情況

限制二:跟在輸入函式之後的輸出函式。

CSAPP 第1章筆記

當我們對系統的某個部分加速時,其對系統整體效能的影響取決於該部分的重要性和加速程度。若系統執行某應用程式需要時間為to ldt ol d。假設系統某部分所需執行時間與該時間的比例為 而該部分效能提公升比例為 k k 即該部分初始所需時間為 t old to ld t old,現在所需時間為 told...

CSAPP複習之系統級別I O

基於連線 當前檔案位置指標k seek 讀寫 目錄 每個目錄至少含兩個條目 套接字管道等此處不討論 普通檔案 目錄當前工作目錄 絕對路徑 從root開始 一直到當前檔案 相對路徑 用.和 失敗返回 1 例子int main void 先從kb輸入到核心的乙個buffer之後才由程式去讀取 不足值 所...

第10章 系統日誌管理

系統裡的任何操作 任何的模組的訪問 任何服務的呼叫,使用者的登入情況等等都會被記錄起來,方便日後追查之用。若記錄日誌影響了系統的整體效能,不需要進行日誌記錄功能,可以在配置檔案中設定開關選項,可以取消日誌記錄功能。日常應用中,不建議去掉日誌記錄功能,日誌管理模組主要由使用者賬戶訪問情況 按使用者賬戶...