1. 程式人生 > >2018-2019-1 20165235 《資訊安全系統設計基礎》第六週學習總結

2018-2019-1 20165235 《資訊安全系統設計基礎》第六週學習總結

2018-2019-1 20165235 《資訊安全系統設計基礎》第六週學習總結

教材學習內容總結

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個位元組可能會導致超出或者是不足值的問題。

程式碼託管

其他(感悟、思考等,可選)

對於Unix I/O和RIO函式來說,標準I/O函式更為高階。不要用scanf函式和rio_readlineb函式來讀取二進位制檔案,會使程式出現錯誤。而對於網路套接字,要使用RIO函式,用標準I/O,會出現一些錯誤。