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在哪一個文件中
2018-2019-1 20165320 《信息安全系統設計基礎》第六周學習總結