fopen,fread,fwrite,fflush,fclose
可以 man stdio 檢視用法
if (io == null )
分開使用讀寫流
示例10.1 中的流io 允許同時進行讀和寫,這是允許的。但在實際應用中,分別開啟輸入和輸出流會更安全,因為實現乙個讀寫流緩衝比單獨的讀或則寫流的緩衝技術要複雜,且當i/o 流由寫( 讀) 模式切換到讀( 寫) 模式時,需要執行fgetpos 呼叫。這樣,分開後會有更好的緩衝效能。避免了緩衝區的互動和對fgetpos 的呼叫。
建立分離讀寫流
int s;// 套介面
file* rx;// 讀流
file* tx;// 寫流
s = socket(pf_inet, sock_stream,0);
...rx = fdopen(s,」r」);
if (rx == null)
tx = fdopen(dup(s),」w」);// 注意dup 函式
if (tx==null)
//report error
使用dup 複製乙個套介面的原因是:不同的流使用不同的問價描述符。最簡單的情 況,當呼叫fclose(tx) 時,不會關閉rx 正在使用的同乙個套介面。
int dup (int oldfd);
將套介面s 作為輸入引數,得到乙個新的檔案描述符。該描述符也指向同乙個套接
口s 。執行了複製操作後,只有各個描述符都關閉時,套介面本身才被核心關閉。
( 如果不使用shutdown 函式)
fclose(rx);//
補充:shutdown ,不考慮套介面上開啟的檔案描述符的個數,他會影響該套介面上所有檔案描述符,從而影響連線到該套介面的所有的流。
定義緩衝操作
緩衝寫,可以減少系統呼叫write函式的頻率。緩衝讀,可以使read一次讀入更多的資料,這樣可以提高系統的i/o效能。
linux中的file流有三種基本緩衝模式:
* 全緩衝(塊緩衝)
* 線形緩衝
* 無緩衝
如果與流對應的檔案描述符為終端裝置,輸入/輸出常設定成線性緩衝模式。而檔案常設定為全緩衝模式。
套接**互是文字行方式,通常採用線性緩衝模式,使用者無需呼叫fflush()將最後的文字行寫到套介面。如果使用全緩衝模式,則進行套介面上的物理寫時,要呼叫fflush()。否則,資料有可能滯留在緩衝區,導致應用程式無限期的等待。
相關函式,setbuf,setbuffer,setlinebuf,setvbuf *.
下面是個綜合的例子片段,
用套介面實現I O
include include include includeint main z write s 1 cp hello?strlen cp if z 0 z read s 0 buf,sizeof buf if z 0 printf s 0 receive message s n buf z wr...
基礎IO 標準庫IO介面 系統呼叫IO介面
標準庫io介面 fopen fclose fread fwrite fseek file fopen const char path,const char mode r唯讀開啟,檔案不存在報錯 r 讀寫開啟,檔案不存在報錯 w只寫,檔案不存在則建立 若存在則清空原內容 w 讀寫開啟,檔案不存在則建立...
Linux標準庫IO介面
標準庫的io介面 include file fopen const char path,const char mode 返回值 成功將返回乙個指向檔案物件file的指標.否則,將返回 null fopen開啟檔名為path指向的字串的檔案,將乙個流與它關聯 引數mode指向乙個字串,以下列序列之一開...