標準I O庫之流 FILE物件 三個標準流以及緩衝

2021-10-03 00:02:29 字數 1732 閱讀 4479

對於標準i/o庫而言,它們所有的操作均是圍繞著流來進行的。標準i/o檔案流可用於單位元組或多位元組字符集。流的定向決定了所讀、寫的字元是單位元組還是多位元組。只有兩個函式可改變流的定向,freopen函式清除乙個流的定向;fwide函式可用於設定流的定向。

#include #include int fwide(file *fp, int mode);

函式返回值:若流是寬定向,返回正值;若流是位元組定向的,返回負值;若流是未定向的,返回 0。

根據mode引數的不同值,fwide函式執行不同的工作。

對於乙個程序而言預定義了3個流,並且這3個流可以自動地被程序使用,它們分別是標準輸入、標準輸出以及標準錯誤。這些流引用的檔案與檔案描述stdin_filenostdout_filenostderr_fileno所引用的相同。這三個標準i/o流通過預定義檔案指標stdinstdoutstderr加以引用。

標準i/o庫提供緩衝的目的是盡可能減少使用readwrite呼叫的次數。

標準i/o提供以下三種型別的緩衝

注意行緩衝有兩個限制,第一,因為標準i/o庫用來收集每一行緩衝區的長度是固定的,所以只要填滿了緩衝區,那麼即使還沒有寫乙個換行符也進行i/o操作。第二,任何時候只要通過標準i/o庫要求從(a)乙個不帶緩衝的流,或者(b)乙個行緩衝的流得到輸入資料,那麼就會沖洗所有行緩衝輸出流。

iso c要求下列緩衝特徵:

對於不想使用系統預設緩衝的情形時,可以通過以下兩個函式進行更改緩衝型別。

#include void setbuf(file *restrict fp, char *restrict buf);

int setvbuf(file *restrict fp, char *restrict buf, int mode, size_t size);

函式返回值:若成功,返回 0;若出錯,返回非0。

上面函式的各個選項總結如下:

函式mode

buf緩衝區及長度

緩衝型別

setbuf

——非空

長度為bufsize的使用者緩衝區buf

全緩衝或行緩衝

——null

無緩衝區

不帶緩衝

setvbuf

_iofbf

非空長度為size的使用者緩衝區buf

全緩衝null

合適長度的系統緩衝區buf

全緩衝_iolbf

非空長度為size的使用者緩衝區buf

行緩衝null

合適長度的系統緩衝區buf

行緩衝_ionbf

忽略無緩衝區

不帶緩衝

任何時候,我們均可強制沖洗乙個流。

#include int fflush(file *fp);

返回值:若成功,返回0;若出錯,返回eof。

此函式使該流所有的未寫的資料都送到核心。作為一種特殊情形,若fpnull,則此函式將導致所有輸出流被沖洗。

標準I O流和FILE物件常用函式

fife 指標 有關於檔案的資訊結構體。一 緩衝檔案系統分類 1.全快取 開啟乙個檔案是全緩衝。2.行快取 當流遇到乙個終端的時候,是乙個典型的行快取。當輸入,輸出遇到新行符,進行i o操作。3.不快取 不對字元進行緩衝,例如 stderr 人機互動,標準出錯。使用setbuf setvbuf 可以...

linxu C 學習筆記(三) 標準I O庫

標準i o庫 標頭檔案 includefopen 開啟由filename引數指定的檔案並把它與乙個檔案流關聯起來。mode引數指定檔案的開啟方式。file fopen const char filename,const char mode fread 從檔案流stream中讀取長度為size的nit...

建立Oracle資料庫索引的三個標準

在oracle資料庫中,建立索引雖然比較簡單。但是要合理的建立索引則比較困難了。筆者認為,在建立索引時要做到三個適當,即在適當的表上 適當的列上建立適當數量的索引。雖然這可以通過一句話來概括優化的索引的基本準則,但是要做到這一點的話,需要資料庫管理員做出很大的努力。具體的來說,要做到這個三個適當有如...