資訊保安設計基礎系統第九周學習總結

2022-08-21 23:36:16 字數 4334 閱讀 9148

10系統級i/o

10.1 unix i/o

這一節涉及到作業系統的基本抽象之一——檔案。也就是說,所有的i/o裝置都被模型化為檔案,而所有的輸入輸出都被當做對相應檔案的讀/寫。相關的執行動作如下:

開啟檔案:

應用程式向核心發出請求→要求核心開啟相應的檔案→核心返回檔案描述符

檔案描述符:

標準錯誤——2(stderr_fileno)

改變當前的檔案位置

通常,讀,寫操作都從當前檔案偏移量處開始(也就是檔案位置),並使偏移量增加所讀寫的位元組數,可以理解為游標所在的位置。

當開啟乙個檔案的最初時候檔案的偏移量為0.

通過seek操作,可以顯示的設定檔案的當前位置為k。

讀寫檔案

讀操作就是從檔案拷貝n>0個位元組到儲存器,並且改變檔案當前位置。(如果當前位置是k,則改變為k+n)

寫操作是從儲存器拷貝n>0個位元組到乙個檔案,然後更新當前檔案位置。

關閉檔案

應用通知核心關閉檔案→核心釋放檔案開啟時的資料結構→恢復描述符→釋放儲存器資源。

10.2開啟和關閉檔案

1.open函式

(1)函式定義:

#include

#include

#include

intopen(char *filename, int flags, mode_t mode);

(2)引數解析:

這些值可以用連線起來。

mode:指定了新檔案的訪問許可權位

2.close函式

(1)函式定義:

#include

intclose(intfd);

(2)引數解析:

10.3讀和寫檔案

1.read

(1)函式原型:

#include

ssize_tread(intfd, void *buf, size_t n);

(2)引數解析:

2.write

(1)函式原型:

#include

ssize_twrite(intfd, void *buf, size_t n);

(2)引數解析:

3.通過lseek函式可以顯式的修改當前檔案的位置

4.不足值

不足值指在某些情況下,read和write傳送的位元組比應用程式要求的要少,原因如下:

10.4 rio包健壯的讀寫

1.rio的無緩衝的輸入輸出函式。

作用是直接在儲存器和檔案之間傳送資料,常適用於網路和二進位制資料之間。

rio_readn函式和rio_writen定義:

ssize_trio_readn(intfd, void *usrbuf, size_t n);

ssize_trio_writen(intfd, void *usrbuf, size_t n);

引數:返回值:

rio_writen成功則返回傳送的位元組數,出錯為-1,沒有不足值。

2.rio的帶緩衝的輸入函式

可高效的從檔案中讀取文字行和二進位制資料。

乙個文字行就是乙個由換行符結尾的ascii碼字串行。

rio_readnb函式

ssize_trio_readnb(rio_t *rp, void *usrbuf, size_tn)

elseif (nread == 0)

break;              /* eof */

nleft -= nread;

bufp += nread;

}return (n - nleft);         /* 返回成功傳送的位元組數*/

}rio_readlineb函式

ssize_trio_readlineb(rio_t *rp, void *usrbuf, size_tmaxlen)

elseif (rc == 0) else

return -1;     /* 錯誤,返回-1 */

}*bufp = 0;

returnn;//返回成功傳送的位元組數

}10.5讀取檔案元資料

元資料即檔案資訊,需要用到的函式是stat和fstat。定義如下:

#include

#include

intstat(constchar *filename, struct stat *buf);

intfstat(intfd,struct stat *buf);

返回值:成功為0,錯誤為-1

引數:stat需要輸入檔名,而fstat需要輸入的是檔案描述符。

關於stat資料結構如下圖:

st_mode:包編碼檔案訪問許可位和檔案型別。許可位在第一節提到了,unix檔案型別如下,並有對應的巨集指令,含義均為「是xx嗎」,這些巨集在sys/stat.h中定義:

套接字      通過網路與其他程序通訊的檔案   s_issock()

10.6共享檔案

每個描述符都有它自己的檔案位置,所以對不同描述符的讀操作可以從檔案的不同位置獲取資料。

子程序繼承父程序的開啟檔案:

參考資料

1.2035202閆佳歆與20135302魏靜靜

2.《深入理解計算機系統》

stdio.h   標準輸入輸出

stdlib.h  c標準函式庫

unistd.h  unix類系統定義符號常量

fcntl.h   定義了很多巨集和open,fcntl函式原型

sys/types.h         基本系統資料型別

dirent.h  unix類目錄操作的標頭檔案,包含了許多unix系統服務的函式原型,例如opendir函式、readdir函式。

termios.h 在posix規範中定義的標準介面

學習總結遇到的問題:

6h10h

實踐**:下面四圖各為老師給的**執行的結果。cp1,cp2,who1,who2

資訊保安系統設計基礎第九周總結

第十章 系統級i o 輸入操作是從i o裝置拷貝資料到主存,輸出操作是從主存拷貝資料到i o裝置 10.1unix i o 乙個unix檔案就是乙個m個位元組的序列 所有的i o裝置都被模型化為檔案,所有的輸入和輸出都被當作對相應檔案的讀和寫來執行.這種將裝置影射為檔案的方式,稱為unix i o ...

20135337 資訊保安設計基礎第九周學習筆記

這次實踐內容是學習ls who echostate filesize fileinfo spwd testioctl等命令的具體實現功能的c 功能 複製檔案或目錄 說明 cp指令用於複製檔案或目錄,如同時指定兩個以上的檔案或目錄,且最後的目的地是乙個已經存在的目錄,則它會把前面指定的所有檔案或目錄複...

《資訊保安專業導論》第九周學習總結

這個作業屬於哪個課程 這個作業要求在 作業要求的鏈結 如2020 2021 1資訊保安專業導論第九周作業 這個作業的目標 總結第九周學習內容 作業正文 自學了pygame的部分內容,嘗試去編寫了俄羅斯方塊。學習了linux系統的一些操作,更好地使用虛擬機器。學習了解了排名前50的部分語言。改進情況 ...