20165311 《資訊安全系統設計基礎》第六週學習總結
阿新 • • 發佈:2018-11-04
一、UNIX I/O
所有的I/O裝置,如網路、磁碟都被模型化為檔案,而所有的輸入和輸出都被當做對相應檔案的讀和寫來執行。
這種將裝置對映為檔案的方式,允許UNIX核心引出一個簡單、低階的應用介面,稱為UNIX I/O,這使得所有的輸入和輸出都能以一種統一且一致的方式來執行。
- 開啟檔案 開啟檔案操作完成以後才能對檔案進行一些列的操作,開啟完成過以後會返回一個檔案描述符,它在後續對此檔案的所有操作中標識這個檔案,核心記錄有關這個開啟檔案的所有資訊。
- 改變當前的檔案位置。
- 讀寫檔案
- 關閉檔案 應用完成了對檔案的訪問之後,就通知核心關閉這個檔案,核心釋放檔案開啟時建立的資料結構,並將這個描述符恢復到可用的描述符池中。程序終止,核心也會關閉所有開啟的檔案並釋放他們的儲存器資源。
二、開啟和關閉檔案
三、讀和寫檔案
在系統I/O中讀寫檔案用的系統函式為read()和write()函式來執行
#include <unistd.h> ssize_t read(int fd,void * buf,size_t n); ssize_t write(int fd,void *buf,size_t n);
read函式從描述符為fd的當前檔案位置拷貝最多n個位元組到儲存器位置buf。返回值-1表示一個錯誤,而返回值0表示EOF。否則,返回值表示的是實際傳送的位元組數量。而write函式從儲存器位置buf拷貝至多n個位元組到描述符fd的當前檔案位置。返回值要麼為-1要麼為寫入的位元組數目。
四、用RIO包健壯地讀寫
RIO提供了方便、健壯和高效的I/O。提供了兩類不同的函式:
- 無緩衝的輸入輸出函式 直接在儲存器和檔案之間傳送資料,沒有應用級緩衝,它們對將二進位制資料讀寫到網路和從網路讀寫二進位制資料尤其有用。
- 帶緩衝的輸入函式
ssize_t rio_readn(int fd,void *usrbuf,size_t n); ssize_t rio_writen(int fd,void *usrbuf,size_t n);