流的定向決定了所讀、寫的字元是單位元組還是多位元組的。(如ascii字符集是單位元組的,國際字符集是多位元組的)
三個標準i/o流通過預定義檔案指標stdin、stdout和stderr加以引用。#include#includeint fwide(file *fp, int mode)
寬定向返回正值,位元組定向返回負值,未定向返回0fwide並不改變已定向的流方向
緩衝標準i/o庫提供緩衝的目的是盡可能減少使用read和write呼叫次數。
unix裡面關於標準io的幾種緩衝機制:
1、全緩衝 。全緩衝指的是系統在填滿標準io緩衝區之後才進行實際的io操作;注意,對於駐留在磁碟上的檔案來說通常是由標準io庫實施全緩衝。一般呼叫malloc獲得緩衝區,呼叫fflush強制寫入磁碟
2、行緩衝 。在這種情況下,標準io在輸入和輸出中遇到換行符時執行io操作;注意,當流涉及終端的時候,通常使用的是行緩衝。
3、無緩衝 。無緩衝指的是標準io庫不對字元進行緩衝儲存;注意,標準出錯流stderr通常是無緩衝的。
標準i/o效率
圖5-6中顯示了對統一檔案(98.5mb,300萬行)進行行操作多的的資料
對於這三個標準的io版,其使用者時間都大於表3-2中的最佳read版本,因為在每次讀乙個字元的標準i/o版本中有乙個要執行一億次的迴圈。而對每讀一行的版本要執行三百萬多次迴圈。在read版本中,其迴圈只需執行12611次,主要決定了緩衝區的長度8192位元組。
其差別就是在cpu時間和等待i/o結束所消耗的時間。
臨時檔案
sptr可以是null或者乙個棧位址。當sptr為null時,返回乙個內部靜態記憶體位址(儲存了臨時檔名),當下一次以null呼叫函式的時候,該記憶體會被修改。棧位址必須至少有l_tmpnam記憶體,這樣名字儲存在那個陣列裡面,如陣列 char buffer [l_tmpnam],注意用此檔名去開啟檔案流所建立的檔案都是臨時性的。tmpnam可以被乙個程式最多呼叫tmp_max(最少為幾千次),每一次它都會返回乙個不同的檔名。#include功能
產生乙個唯一的檔名
函式原型
char *tmpnam(char *sptr);
標準i/o庫中提供了兩個函式來建立臨時檔案,這個函式是其中之一,另外乙個是tmpnam。值得注意的是,每呼叫一次tmpnam,就產生乙個不同的檔名,最多呼叫次數為tmp_max,該巨集定義在中。建立的臨時檔案在程式退出時會被自動刪除。功 能
以wb+形式建立乙個臨時二進位制檔案
函式原型
file *tmpfile(void);
記憶體流標準i/o庫把資料快取在記憶體中,因此每次乙個字元和每次一行的i/o更有效。我們可以通過呼叫setbuf貨setvbuf函式讓i/o庫使用我們自己的緩衝區。
第5章 標準I O庫
當開啟乙個流時,標準i o函式fopen返回乙個指向file物件的指標。該物件通常是乙個結構,它包含了標準i o庫為管理該流所需要的所有資訊,包括 用於實現i o的檔案描述符 指向用於該流緩衝區的指標 緩衝區的長度 當前在緩衝區中的字元數以及出錯標誌等等。應用程式沒有必要檢驗file物件。對乙個程序...
第5章標準I O庫總結
1 fwide函式試圖設定流的定向 流的定向決定了讀寫單位元組還是多位元組字元 int fwide file fp,int mode 寬定向返回正值,位元組定向返回負值,為定向返回0已定向流不會改變流的定向 2 setbuf函式中指定的緩衝區的長度為bufsiz,這個常量在stdio.h中定義 3 ...
第8章 標準IO庫
iostream繼承層次 istream和ostream是最上層,istream派生出ifstream和istringstream,ostream派生出ofstream和ostringstream。他們兩者共同派生出iostream。iostream派生出stringstream和fstream。標...