2018-2019-1 20165234 《資訊安全系統設計基礎》第六週學習總結
阿新 • • 發佈:2018-11-04
Unix I/O
- 開啟檔案:一個應程式通過要求核心開啟相應的檔案。
- Linux shell:建立的每個程序,開始都有三個開啟的檔案:標準輸入(描述符為0),標準輸出(描述符為1),標準錯誤(描述符為2)
-
關閉檔案:通知核心關閉檔案,作為響應,核心釋放檔案開啟時建立的資料結構。
檔案
- 文字檔案是隻含ASCII或Unicode字元的普通檔案。二進位制檔案是所有其他檔案。
- 目錄:是包含一組連結的檔案,其中每個連結都將檔名對映到一個檔案。
- 絕對路徑:以一個斜槓開始,表示從根節點開始的路徑。
- 相對路徑: 以檔名開始,表示從當前工作目錄開始的路徑。
-
Linux目錄層次:
開啟檔案和關閉檔案
-
mode引數指定了新檔案的訪問許可權,每一個程序都有一個umask,通過呼叫umask來設定的,當前程序通過某個mode引數的open函式來建立新的檔案時,檔案的訪問許可權設定為mode&~umask。
讀和寫檔案
- 在X86-64系統中size_t被定義為:unsigned long。ssize_t被定義為long。
- read_lineb:它從一個內部讀緩衝區複製一個文字行,當緩衝區變空時,會自動的呼叫read函式重新填滿患緩衝區。從檔案rp讀出下一個文字行,將它複製到記憶體位置usrbuf,並且呼叫NULL來結束這個檔案。
-
read 和 wirte傳送位元組不足的問題有:1.讀時遇到EOF。2.從終端讀文字行。3.讀和寫網路套接字。
共享檔案
-
典型的開啟檔案的核心資料結構:
-
檔案共享
教材學習中的問題和解決過程
- 問題1:我看了教材630頁這一段文字 (一旦緩衝區非空,rio_read就從讀緩衝區複製n和rp->rio_cnt中最小值個位元組到使用者緩衝區),有這個問題 (為什麼是要n和rp->rio_cnt中最小值個位元組)。
- 問題1解決方案:上網查詢,以及結合教材明白了。rp->rio_cnt是從檔案中還未讀取的位元組個數,而n是總共要讀取的個數。如果隨意的按rp->rio_cnt個位元組或n個位元組可能會導致超出或者是不足值的問題。