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在哪一個檔案中