對於標準i/o庫而言,它們所有的操作均是圍繞著流來進行的。標準i/o檔案流可用於單位元組或多位元組字符集。流的定向決定了所讀、寫的字元是單位元組還是多位元組。只有兩個函式可改變流的定向,freopen
函式清除乙個流的定向;fwide
函式可用於設定流的定向。
#include #include int fwide(file *fp, int mode);
函式返回值:若流是寬定向,返回正值;若流是位元組定向的,返回負值;若流是未定向的,返回 0。
根據mode
引數的不同值,fwide
函式執行不同的工作。
對於乙個程序而言預定義了3個流,並且這3個流可以自動地被程序使用,它們分別是標準輸入、標準輸出以及標準錯誤。這些流引用的檔案與檔案描述stdin_fileno
、stdout_fileno
、stderr_fileno
所引用的相同。這三個標準i/o流通過預定義檔案指標stdin
、stdout
和stderr
加以引用。
標準i/o庫提供緩衝的目的是盡可能減少使用read
和write
呼叫的次數。
標準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。
此函式使該流所有的未寫的資料都送到核心。作為一種特殊情形,若fp
是null
,則此函式將導致所有輸出流被沖洗。
標準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資料庫中,建立索引雖然比較簡單。但是要合理的建立索引則比較困難了。筆者認為,在建立索引時要做到三個適當,即在適當的表上 適當的列上建立適當數量的索引。雖然這可以通過一句話來概括優化的索引的基本準則,但是要做到這一點的話,需要資料庫管理員做出很大的努力。具體的來說,要做到這個三個適當有如...