套介面上的標準I O 1

2021-09-30 05:34:23 字數 1269 閱讀 2776

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指向乙個字串,以下列序列之一開...