0.UNIX輸入輸出基本概念 異步
Q1.程序與文件創建鏈接或通訊有幾種機制?流與文件描述字有什麼區別? Q2.打開文件的實質? async
打開文件就是程序與文件之間創建鏈接或通訊。 函數
流的類型是FILE; spa
文件描述字的類型是int; .net
流函數創建在文件描述字之上。 設計
1.標準I/O 【針對流】 對象
a. NULL blog
b.流與FILE對象 教程
c.打開與關閉流 進程
d.讀寫流 {讀的方式不一樣;寫的方式不一樣}
e.文件定位
f.文件結束和錯誤指示器 爲了區分到底是錯誤返回仍是文件返回。ferror()肯定是否存在錯誤;feof()檢查是否遇到文件結束。【每一個流對象內部有兩個指示器:一個爲錯誤指示器,一個是文件結束指示器】clearerr()清除這兩個指示器。
g.流緩衝 每個流都有一個輸入輸出緩衝區。寫入流的字符並不當即寫到文件中,而是先在緩衝區中彙集爲一塊,而後異步地以塊爲單位傳送到文件。這種處理方式稱爲緩衝。 {異步I/O什麼原理?} 採用緩衝的目的:減小調用低級I/O函數的次數,由於系統調用是較費時間的操做。【存儲在磁盤上的文件,當進程用read()讀數據時,設備驅動程序必須將數據在文件中的地址轉換爲硬盤的物理磁道號,卷宗叫以及扇段號。以後設備必須移動磁頭至相應的卷宗並等待磁盤的相應扇段旋轉至磁頭之下。一切準備好後才能從磁盤開始讀寫數據。】
(1)全緩衝
(2)行緩衝---->交互設備
(3)無緩衝 --->標準錯誤流
void setbuf();void setvbuf();必須在流已打開後且先於其餘任何操做執行以前調用。【setbuf()其實是setvbuf()的特例,等價於setvbuf(stream, buf, buf?_IOFBF:_IONBF,BUFSIZ)】
刷新:將緩衝區的數據寫出到文件中。默認如下狀況自動刷新:1)流被關閉時;2)調用exit()終止程序時;3)流是行緩衝的,當寫出一換行符時;4)當企圖輸出而緩衝區已滿時;5)不管什麼時候對流的輸入操做致使它實際從文件讀數據時。其它時刻刷新緩衝區內容:顯式地調用fflush()
h.格式I/O {格式輸入;格式輸出}
i.臨時文件
Q 通常暫存什麼數據?有什麼特色?應用場景?相關函數{tmpnam(), tempnam(), tmpfile()}?函數使用舉例?
j.其它:
{ESPIP錯誤};
FILE結構體;
Q 文件位置起什麼做用? 爲何fgets()是危險的函數?讀回退?
2.低級I/O 【針對描述字】
b1.read()和write()函數;b2.readv()和writev()函數
c.文件位置
d.文件複製 dup()和dup2()
e.fdopen()和fileno()
f.fcntl()
g.非阻塞I/O {想到了週五看UNP的I/O模型}
阻塞I/O :調用必須等到操做完成,即讀寫到數據,才能返回。
h.fsync()和fdatasync()函數
3.終端I/O
http://blog.csdn.net/wubin1124/article/details/5155864
Q1.爲什麼引入終端I/O
Q2.終端I/O概述,分爲幾種類型
?使用GTI提供的終端I/O控制函數改變終端的默認設置
4.高級I/O
參考:APUE; 《UNIX/Linux程序設計教程》;
/*wolflion(天行)整理,轉載註明出處*/ 2013.3.17 version1.0