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

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

教材知識點總結

Unix I/O

  • 介紹:所有I/O裝置都被模型化為檔案,這種將裝置對映為檔案的方式,允許Linux核心引出一個簡單、低階的應用介面,稱為Unix I/O。

    • 開啟檔案:一個應用程式通過要求核心開啟相應的檔案,宣告它想要訪問一個I/O裝置。

    • 每個程序開始時有3個開啟的檔案:標準輸入、標準輸出、標準錯誤。

    • 改變當前檔案位置:每個開啟的檔案,有一個檔案位置k,檔案位置是檔案開頭起始的位元組偏移量。seek可以顯式設定檔案的當前位置。

    • 讀寫檔案:

      讀:從檔案複製n個位元組到記憶體中

      寫:從記憶體複製n個位元組到檔案中

    • 關閉檔案:核心釋放檔案開啟時建立的資料結構,關閉開啟的檔案並釋放記憶體。

檔案

  • 檔案型別

    • 普通檔案:

      • 文字檔案:只含有ASCII或Unicode字元的普通檔案。

      • 二進位制檔案:所有不是文字檔案的檔案。

    • 目錄:包含一組連結的檔案,每個連結都將一個檔名對映到一個檔案。

    • 套接字:用來與另一個程序進行跨網路通訊的檔案。

    • 可以用cd命令修改shell中的當前工作目錄。

    • 路徑名的兩種形式:

      • 絕對路徑:以一個斜槓開始,表示從根節點開始的路徑。

      • 相對路徑:以檔名開始,表示從當前工作目錄開始的路徑。

    • 開啟與關閉檔案:

      • 程序通過Open函式開啟一個已存在的檔案或者建立新檔案。

          int open(char *filename,int flags,mode_t mode);
      • 原理:open函式將檔名轉換成一個檔案描述符,並且返回該描述符數字。

      • flag引數:

        O_RDONLY:只讀

        O_WRONLY:只寫

        O_RDWR:可讀可寫

        O_CREAT:如果檔案不存在,建立一個新檔案。

        O_TRUNC:如果檔案已存在,截斷。

        O_APPEND:在每次寫操作前,設定檔案位置到檔案的結尾處。

        例子:fd = Open("foo.txt",O_RDONLY,0)

        以讀的方式開啟一個已存在的檔案。

      • mode引數:指定了新檔案的訪問許可權位。

        S_IRXX:XX能夠讀這個檔案

        S_IWXX:XX能夠寫這個檔案

        S_IXXX:XX能夠執行這個檔案

      • 程序通過呼叫close函式關閉一個開啟的檔案,傳入的引數為檔案描述符。

          int close(int fd);
      • 如果關閉一個已關閉的描述符會出錯

    • 讀和寫檔案

      • 應用程式通過read與write函式來執行輸入和輸出。

        • read介紹:read函式從描述符為fd的當前檔案位置複製最多n個位元組到記憶體位置buf,返回值為-1表示一個錯誤,返回值為0表示EOF。

            ssize_t read(int fd, void *buf , size_t n);
        • write介紹:從記憶體位置buf複製至多n個位元組到描述符fd的當前檔案位置。

            ssize_t write(int fd, const void *buf , size_t n);
    • RIO包的兩種不同函式

      • 無緩衝的輸入輸出函式:直接在記憶體與檔案之間傳送資料

      • 帶緩衝的輸入函式:允許高效地從檔案中讀取文字行與二進位制資料。

    • 應用可以通過stat函式檢索相關檔案資訊。

      • stat函式以一個檔名為輸入,並填寫一個stat資料結構中的各個成員。

        int stat(const char filename,struct stat buf);

標準I/O

  • 相關函式

    • 開啟與關閉檔案:fopen(),fclose()

    • 讀和寫:fread(),fwrite()

    • 讀、寫字串:fgets(),fputs()

課上相關命令總結

  • od :讀取檔案內容,以二進位制顯示。

  • man -k k1| grep k2 | grep k3:過濾關鍵字k查詢

  • grep -nr XXX /usr/include:尋找XXX在哪一個檔案中