2018-2019-1 20165330 《資訊安全系統設計基礎》第六週學習總結
阿新 • • 發佈:2018-11-04
學習目標
- 瞭解系統呼叫及錯誤處理方法
- 理解IO處理及檔案系統
- 掌握Unix/Linux系統級I/O:
open
close
read
write
seek
stat
- 掌握
I/O
重定向的方法
學習內容
Linux I/O
Linux I/O
:將裝置優雅地對映為檔案的方式,允許Linux核心引出一個簡單、低階的應用介面- 輸入輸出執行方式:
- 開啟檔案
- 描述符:核心開啟檔案時返回的一個小的非負整數
- 每個程序開始均有三個開啟的檔案
- 標準輸入(描述符為0)
- 標準輸出(描述符為1)
- 標準錯誤(描述符為2)
- 改變當前的檔案位置
- 讀寫檔案
- 關閉檔案
- 開啟檔案
- 檔案
- 型別:普通檔案、目錄、套接字
- 目錄層次:
- 開啟和關閉檔案
- 呼叫
open
函式開啟一個已存在的檔案或建立一個新檔案
int open(char *filename,int flags,mode_t mode);
flags
引數指明開啟檔案方式:- O_RDONLY:只讀
- O_WRONLY:只寫
- O_RDWR:可讀可寫
flags
引數提供額外提示:- O_CREAT:檔案不存在,建立一個截斷(空)檔案
- O_TRUNC:檔案已存在就截斷它
- O_APPEND:在每次寫操作前,設定檔案位置到檔案的結尾處
- 關閉檔案:
int close(fd);
- 呼叫
- 讀和寫檔案
- 呼叫
read
和write
函式執行輸入輸出
size_t read(int fd,void *buf,size_t n); ssize_t write(int fd,void *buf,size_t n);
- 呼叫
- 型別:普通檔案、目錄、套接字
RIO包
無緩衝的輸入輸出函式
#include "csapp.h" ssize_t rio_readn(int fd,void *usrbuf,size_t n); ssize_t rio_writen(int fd,void *usrbuf,size_t n);
帶緩衝的輸入函式
#include "csapp.h" void rio_readinitb(rio_t *rp,int fd); ssize_t rio_readlineb(rio_t *rp,void *usrbuf,size_t maxlen); ssize_t rio_readnb(rio_t *rp,void *usrbuf,size_t n);
- 讀取檔案元資料
- 呼叫
stat
和fstat
函式檢索檔案的資訊(元資料)
#include <unistd.h> #include <sys/stat.h> int stat(const char *filename,struct stat *buf); int fstat(int fd,struct stat *buf);
- 讀取目錄內容
- 返回目錄流的指標
#include <dirent.h> #include <sys/stat.h> DIR *opendir(const char *name);
- 返回流dirp中下一目錄項的指標
#include <dirent.h> struct dirent *readdir(DIR *dirp);
- 關閉流並釋放所有資源
#include <dirent.h> int closedir(DIR *dirp);
I/O重定向
- Linux shell提供了I/O重定向操作符,允許使用者將磁碟檔案和標準輸入輸出聯絡起來
- 重定向到磁碟檔案
foo.txt
:linux> ls > foo.txt
I/O重定向使用
dup2
函式工作#include <unistd.h> int dup2(int oldfd,int newfd);
兩個重要命令
man -k key1 | grep key2| grep 2
:根據關鍵字檢索系統呼叫- Linux系統提供了相對比較豐富的幫助手冊(man),man是manual的縮寫,在日常linux系統管理中經常用到
- 在Ubuntu下可通過
man deluser
檢視相關幫助文件 man -k
:根據關鍵字搜尋聯機幫助,是一種模糊搜尋man -f
:關鍵字精確搜尋,與-k不同,它只搜尋與關鍵字完全匹配的幫助頁man -a
:搜尋並開啟所有man中同名幫助man -aw
:顯示所有手冊檔案的路徑
grep -nr XXX /usr/include
:查詢巨集定義,型別定義grep -nr
:這條語句可以用來查詢關鍵字,全文搜尋,並且可以直接查詢檔案內的內容- 查詢巨集 STDOUTFILENO 的值:
grep -nr STDOUTFILENO /usr/include
- 查詢當前目錄下
.c
中main函式
在那個檔案中:grep main .c
grep [options]
:過濾/搜尋特定字元[options]
主要引數:-a
:不要忽略二進位制的資料-A<顯示列數>
:除了顯示符合範本樣式的那一列之外,並顯示該列之後的內容-b
:在顯示符合範本樣式的那一列之前,標示出該列第一個字元的位編號-B<顯示列數>
:除了顯示符合範本樣式的那一列之外,並顯示該列之前的內容-c
:計算符合範本樣式的列數。-V
:顯示版本資訊-q
:不顯示任何資訊
ch06課下測試錯題總結
- 有關磁碟操作,說法正確的是()
A .
對磁碟扇區的訪問時間包括三個部分中,傳送時間最小。
B .
磁碟以位元組為單位讀寫資料
C .
磁碟以扇區為單位讀寫資料
D .
讀寫頭總處於同一柱面
正確答案:A C D 書P409
- 有關RAM的說法,正確的是()
A .
SRAM和DRAM掉電後均無法儲存裡面的內容。
B .
DRAM將一個bit存在一個雙穩態的儲存單元中
C .
一般來說,SRAM比DRAM快
D .
SRAM常用來作快取記憶體
E .
DRAM將每一個bit儲存為對一個電容充電
F .
SRAM需要不斷重新整理
G .
DRAM被組織為二維陣列而不是線性陣列
正確答案: A C D E G 書P400