unix環境高階程式設計(第三版) 讀書筆記4

2021-09-09 05:20:37 字數 1527 閱讀 1036

對於核心而言,所有開啟的檔案都通過檔案描述符引用。檔案描述符是乙個非負整數。當開啟乙個現有檔案或建立乙個新檔案時,核心向程序返回乙個檔案描述符。

unix系統shell把檔案描述符0與程序的標準輸入相關聯,檔案描述符1與標準輸出關聯,檔案描述符2與標準錯誤關聯。

檔案描述符的變化範圍是0 ~ open_max-1。

所有常用的unix系統shell都提供一種方法,他在標準輸入上開啟乙個檔案用於讀,在標準輸出上建立乙個檔案。

程序終止時,unix系統核心會關閉程序的所有開啟的檔案描述符。

磁碟塊長度由st_blksize表示,可能值為4096。讀寫緩衝區長度大於等於磁碟塊長度讀寫效率更好。

大多數檔案系統都採用某種預讀(read ahead)技術就,將相關的資料從磁碟讀到核心。

linux核心的檔案預讀詳細解析

在使用windows xp較長時間後,我們會發現系統執行速度明顯慢了下來,用多優化軟體、解除安裝已經安裝的軟體都解決不了問題。究竟為什麼呢?原來罪魁禍首就是預讀設定。在 「windows\prefetch」資料夾面有很多個以pf為副檔名的檔案,這就是預讀檔案,如果將裡面的檔案清空以後,你就會發現系統執行速度又恢復正常了!看來,預讀設定可以提高系統速度,但是使用一段時間後,預讀資料夾裡的檔案又會變得很多了,導致系統搜尋花費的時間變得很長。而且有些應用程式會產生死鏈結檔案,進而加重了系統搜尋的負擔。因此,我們應該定期刪除這些預讀檔案,用以提高開機速度。

作業系統試圖用快取記憶體技術將相關檔案放置在主存中,所以如若重複度量程式效能,那麼後續執行該程式所得到的計時很可能好於第一次。

unix系統支援在不同程序間共享開啟檔案。核心使用3種資料結構表示開啟檔案,他們之間的關係決定了在檔案共享方面乙個程序對另乙個程序可能產生的影響。

多個程序操作同一檔案可能出錯,可以用vim 編輯同乙個檔案試試。

原子操作指的是由多步組成的乙個操作。要麼執行完所有步驟,要麼一步也不執行,不可能只執行所有步驟的乙個子集。

任何要求多於乙個函式呼叫的操作都不是原子操作,因為在兩個函式呼叫之間,核心有可能會臨時掛起程序。

函式pread和pwrite是原子操作。

這兩個函式都可以用來複製檔案描述符。不同的檔案描述符但都指向相同的檔案表項。

sync函式只是將所有修改過的塊緩衝區排入寫佇列,然後就返回,它並不等待實際寫磁碟操作結束。

通常稱為update的系統守護程序會周期性地(一般每隔30秒)呼叫sync函式。這就保證了定期沖洗核心的塊緩衝區。命令sync(1)也呼叫sync函式。

fsync函式只對由檔案描述符filedes指定的單一檔案起作用,並且等待寫磁碟操作結束,然後返回。fsync可用於資料庫這樣的應用程式,這種應用程式需要確保將修改過的塊立即寫到磁碟上。

fdatasync函式類似於fsync,但它只影響檔案的資料部分。而除資料外,fsync還會同步更新檔案的屬性。

《Unix環境高階程式設計第三版》程式索引

學習unix環境高階程式設計一書時,根據書上的 進行練習是一種提高閱讀興趣的好方法。該文可以幫助你編譯 以及索引書中程式的位置。作者使用的是centos7作業系統進行練習。如果沒有unix環境高階程式設計第三版課本以及源 可以從作者github裡獲取,鏈結如下 cd apue3 master mak...

UNIX環境高階程式設計第三版原始碼編譯

unix環境高階程式設計第三版原始碼編譯遇到的問題 一 問題描述 make,遇到錯誤 cannot find lbsd 二 原因 缺少缺少libbsd檔案。三 解決方法 yum install libbsd yum install libbsd devel 安裝完成後就可以去apue.3e目錄mak...

Javascript高階程式設計(第三版) 陣列

var colors red blue green colors.length 2 alert colors 2 undifined陣列的length屬性不是唯讀的。如果將其length的值設為大於陣列項數的值,則新增的每一項都會取得undefined值。可以方便的在陣列末尾新增新項,比如 colo...