標準i/o函式庫:
c標準庫提供了檔案的標準 i/o 函式庫,相比前述的系統呼叫,主要差別是實現了跨平台的使用者態緩衝的解決方案。標準i/o庫使
用簡單,與系統呼叫i/o相似,也包括開啟、讀寫、關閉這些操作,主要的函式列舉如下。
◆ 開啟與關閉檔案:fopen,fclose。
◆ 讀寫檔案:fread,fwrite。
◆ 讀寫文字行:fgets,fputs。
◆ 格式化讀寫:fscanf,fprintf。
◆ 標準輸入輸出:printf,scanf。
◆ 讀寫字元:fgetc,getc,getchar,fputc,putc,putchar。
◆ 其他:fflush,fseek。
所謂標準 i/o 函式實際上是對底層系統呼叫的包裝,最終讀寫裝置或檔案的操作仍需呼叫系統i/o函式來完成。
1. 兩種i/o操作:
一類是f打頭的fopen, fread, fwrite
一類是沒有f打頭的open, read, fwrite
原來乙個是unix i/o(在類unix系統上實現),另一類是標準i/o(在很多系統上都有實現,包括windows)。
2. 使用標準i/o的好處
因為在出unix的很多作業系統(包括windows, linux)上都實現了此庫,所有有利於軟體的移植。
3. 與unixi/o的主要區別
unix i/o的函式都是針對檔案描述符的,而標準i/o的操作都是圍繞流進行的。所為的流就是乙個file *
標準i/o提供了快取--為了儘量減少write, read的呼叫。
標準i/o的效率會低一些,因為它是多了一層封裝。即,fread通過呼叫read來實現。
4. 標準i/o的標頭檔案
stdio.h
三個標準i/o流預定義指標:stdin, stdout, stderr
(unix i/o: stdin_fileno, stdout_fileno, stderr_fileno)
5. 快取
有快取就會有延遲,即輸出裝置上的內容和快取中的內容很可能不一樣。可以呼叫fflush重新整理快取。
有多種快取型別,可以呼叫下面的api來更改預設快取型別。
setbuf, setvbuf
setvbuf可以精確的說明快取的型別。
fclose關閉流時也會重新整理流。
當乙個程序正常終止時(直接呼叫exit,或從main函式返回),則所有帶未寫快取資料的標準i/o流都會被重新整理,所有開啟的標準i/o流都會被關閉。
標準I O函式庫的緩衝
標準i o函式庫執行以下三類緩衝 1,完全緩衝意味著只在出現下列情況時才發生i o緩衝 緩衝區滿,程序顯示呼叫fflush,或者程序呼叫exit終止 標準i o緩衝區的通常大小為8192位元組。2,行緩衝意味著只是在出現下列情況時才發生i o 碰到乙個換行符,程序呼叫fflush,或者程序呼叫exi...
標準函式庫
1 rand與srand函式產生偽隨機數 cpp view plain copy print?intrand void void srand unsigned intseed rand返回乙個範圍在0和rand max之間的偽隨機數,為了避免程式每次執行時獲得相同的隨機數序列,可以使用srand函式...
貫穿案例 構建標準IO函式庫 1
ifndef xx h define xx h endif extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。最好不要在標頭檔案中定義變數 關鍵字 extern 修飾變數 只能用於擴充套件沒有被static關鍵字修飾的全域性...