filename:文件名html
flags:指明進程打算如何訪問這個文件,node
read函數:從描述符爲fd的當前文件位置拷貝最多n個字節到存儲器位置buf。 返回值:-1:一個錯誤;0:EOF;不然,返回值:實際傳送的字節數量。git
write函數:從存儲器位置buf拷貝至多n個字節到描述符fd的當前文件位置。vim
lseek函數:應用程序可以顯式地修改當前文件的位置。緩存
不足值:read和write傳送的字節比應用程序要求的少。安全
產生不足值的緣由:
一、讀時遇到EOF
二、從終端讀文本行
三、讀和寫網絡套接字網絡
RIO包的實質:I/O包數據結構
RIO包提供的兩種函數:無緩衝的輸入輸出函數、帶緩衝的輸入函數(線程安全)app
RIO的帶緩衝的輸入函數函數
一個文本行就是一個有換行符結尾的ASCII碼字符序列。 在Unix系統中,換行符(‘\n’)與ASCII碼換行符(LF)相同,數字值爲0x0a。
檢索文件信息(元數據):應用程序可以經過調用stat和fstat函數
stat函數以一個文件名做爲輸入,填寫一個stat數據結構中的各個成員。
fstat函數以文件描述符而不是文件名做爲輸入。
st_ size成員包含了文件的字節數大小。
st_ mode成員則編碼了文件訪問許可位和文件類型。
文件類型包括:
在sys/stat.h中定義:
內核使用三個相關的數據結構來表示打開的文件:
在內核刪除相應文件表項以前,父子進程必須都關閉了它們的描述符。
unix> ls > foo.txt
標準I/O庫將一個打開的文件模型化爲一個流,一個流就是一個指向FILE類型的結構的指針。每一個ANSIC程序開始都有三個打開的流stdin、stdout和stderr,分別對應於標準輸入、標準輸出、標準錯誤。
類型爲FILE的流是對文件描述符和流緩衝區的抽象。流緩衝區的目的和RIO讀緩衝區的同樣,就是開銷較高的Unix I/O系統調用的數量儘可能能的小。
應用程序能夠經過open、close、lseek、read、write和stat這樣的函數來訪問Unix I/O。
RIO函數:read和write的健壯的包裝函數,自動處理不足值,爲讀文本行提供一種高效的帶緩衝的方法。
套接字描述符:Unix對網絡的抽象是一種稱爲套接字的文件類型,被稱爲套接字描述符。應用進程經過讀寫套接字描述符來與運行在其餘計算機上的進程通訊。
對流I/O限制是:
跟在輸出函數以後的輸入函數,必須在其中間插入fflush、fseek、fsetpos或者rewind函數,後三個函數使用Unix I/O中的lseek函數來重置當前的文件位置。
跟在輸入函數以後的輸出函數,必須在中間插入fseek、fsetpos或者rewind的調用,一個輸出函數不能跟隨在一個輸入函數以後,除非該輸入函數遇到了一個EOF。
解決對流I/O限制的方法是:
採用在每一個輸入操做前刷新緩存區這樣的規則來知足。 對同一個打開的套接字描述符打開兩個流,一個用來讀,一個用來寫。
10.1
10.2
10.3
10.4
10.5
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 4000行 | 24篇 | 400小時 | |
第一週 | 150/150 | 1/1 | 15/15 | 對Linux有了初步的認識 |
第二週 | 200/350 | 1/2 | 20/35 | vim的使用 |
第三週 | 250/600 | 1/4 | 20/55 | 各類信息的表示方法 |
第五週 | 250/850 | 1/5 | 25/80 | 彙編與反彙編 |
第六週 | 150/1000 | 1/6 | 25/105 | Y86 |
第七週 | 74/1074 | 1/7 | 25/130 | 各種存儲器 |
第八週 | 0/1074 | 2/9 | 20/150 | 錯題總結 |
第九周 | 109/1183 | 2/11 | 25/175 | 系統級I/O |