第5章 標準I O庫

2021-07-04 21:01:07 字數 1568 閱讀 3713

流的定向決定了所讀、寫的字元是單位元組還是多位元組的。(如ascii字符集是單位元組的,國際字符集是多位元組的)

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

寬定向返回正值,位元組定向返回負值,未定向返回0fwide並不改變已定向的流方向

三個標準i/o流通過預定義檔案指標stdin、stdout和stderr加以引用。

緩衝標準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結束所消耗的時間。

臨時檔案

#include功能

產生乙個唯一的檔名

函式原型

char *tmpnam(char *sptr);

sptr可以是null或者乙個棧位址。當sptr為null時,返回乙個內部靜態記憶體位址(儲存了臨時檔名),當下一次以null呼叫函式的時候,該記憶體會被修改。棧位址必須至少有l_tmpnam記憶體,這樣名字儲存在那個陣列裡面,如陣列 char buffer [l_tmpnam],注意用此檔名去開啟檔案流所建立的檔案都是臨時性的。tmpnam可以被乙個程式最多呼叫tmp_max(最少為幾千次),每一次它都會返回乙個不同的檔名。

功 能

以wb+形式建立乙個臨時二進位制檔案

函式原型

file *tmpfile(void);

標準i/o庫中提供了兩個函式來建立臨時檔案,這個函式是其中之一,另外乙個是tmpnam。值得注意的是,每呼叫一次tmpnam,就產生乙個不同的檔名,最多呼叫次數為tmp_max,該巨集定義在中。建立的臨時檔案在程式退出時會被自動刪除。

記憶體流標準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。標...