C語言setbuf()函式:把緩衝區與流相關聯
標頭檔案:#include <stdio.h>
函式setbuf()用於將指定緩衝區與特定的檔案流相關聯,實現操作緩衝區時直接操作檔案流的功能。其原型如下:
void setbuf(FILE * stream, char * buf);
【引數】stream為檔案流指標,buf為緩衝區的起始地址。
該函式涉及流和緩衝區的知識,請參考C語言流和緩衝區(快取)專題。
如果引數buf 為NULL 指標,則為無緩衝,setbuf()相當於呼叫setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZE),請參考C語言setvbuf()函式。
setbuf()和setvbuf()函式的實際意義在於:使用者開啟一個檔案後,可以建立自己的檔案緩衝區,而不必使用fopen()函式開啟檔案時設定的預設緩衝區。這樣就可以讓使用者自己來控制緩衝區,包括改變緩衝區大小、定時重新整理緩衝區、改變緩衝區型別、刪除流中預設的緩衝區、為不帶緩衝區的流開闢緩衝區等。
說明:在開啟檔案流後,讀取內容之前,可以呼叫setbuf()來設定檔案流的緩衝區(而且必須是這樣)。
【例項】觀察緩衝區與流關聯後的影響。
輸出結果:
This is a test of buffered output..
This is a test of buffered output..
This is a test of buffered output..
This is a test of buffered output..
程式先把outbuf與輸出流相連,然後輸出一個字串,這時因為緩衝區已經與流相連,所以outbuf中也儲存著這個字串,緊接著puts函式又輸出一遍,所以現在outbuf中儲存著兩個一樣的字串。重新整理輸出流之後,再次puts,則又輸出兩個字串。
函式setbuf()用於將指定緩衝區與特定的檔案流相關聯,實現操作緩衝區時直接操作檔案流的功能。其原型如下:
void setbuf(FILE * stream, char * buf);
【引數】stream為檔案流指標,buf為緩衝區的起始地址。
該函式涉及流和緩衝區的知識,請參考C語言流和緩衝區(快取)專題。
如果引數buf 為NULL 指標,則為無緩衝,setbuf()相當於呼叫setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZE),請參考C語言setvbuf()函式。
setbuf()和setvbuf()函式的實際意義在於:使用者開啟一個檔案後,可以建立自己的檔案緩衝區,而不必使用fopen()函式開啟檔案時設定的預設緩衝區。這樣就可以讓使用者自己來控制緩衝區,包括改變緩衝區大小、定時重新整理緩衝區、改變緩衝區型別、刪除流中預設的緩衝區、為不帶緩衝區的流開闢緩衝區等。
說明:在開啟檔案流後,讀取內容之前,可以呼叫setbuf()來設定檔案流的緩衝區(而且必須是這樣)。
【例項】觀察緩衝區與流關聯後的影響。
- #include <stdio.h>
- char outbuf[BUFSIZ];
- int main(void)
- {
- setbuf(stdout, outbuf); // 把緩衝區與流相連
- puts("This is a test of buffered output.\n");
- puts(outbuf);
- fflush(stdout); // 重新整理
- puts(outbuf); // 輸出
- return 0;
- }
This is a test of buffered output..
This is a test of buffered output..
This is a test of buffered output..
This is a test of buffered output..
程式先把outbuf與輸出流相連,然後輸出一個字串,這時因為緩衝區已經與流相連,所以outbuf中也儲存著這個字串,緊接著puts函式又輸出一遍,所以現在outbuf中儲存著兩個一樣的字串。重新整理輸出流之後,再次puts,則又輸出兩個字串。
相關文章
- C語言setvbuf()函式:設定檔案流的緩衝區C語言函式
- C語言緩衝區問題C語言
- C語言清空輸入緩衝區C語言
- C語言檔案與目錄(四)緩衝區C語言
- C語言相關的基礎字串函式C語言字串函式
- 緩衝區溢位漏洞那些事:C -gets函式函式
- c語言與字串相關的庫函式的模擬實現C語言字串函式
- stdio流緩衝區
- 【C語言】常用的字串函式及相關函式的自我實現C語言字串函式
- C語言清空輸入緩衝區的N種方法對比C語言
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- C語言與嵌入式C語言的區別C語言
- C語言有關函式淺析C語言函式
- C 標準庫IO緩衝區和核心緩衝區的區別
- C語言函式指標與回撥用函式C語言函式指標
- C語言ungetc()函式:把字元退回到輸入流C語言函式字元
- C語言 execve()函式C語言函式
- C語言常用函式C語言函式
- C語言的函式C語言函式
- setbuf函式使用注意事項函式
- C語言 itoa函式及atoi函式C語言函式
- Java™ 教程(緩衝流)Java
- C語言函式指標與回撥函式使用方法C語言函式指標
- C語言函式呼叫棧C語言函式
- 詳解C語言函式C語言函式
- tmpnam() - C語言庫函式C語言函式
- tmpfile() - C語言庫函式C語言函式
- C語言時間函式C語言函式
- c語言函式庫(轉)C語言函式
- C語言 函式指標C語言函式指標
- 08. C語言函式C語言函式
- C語言基礎函式C語言函式
- c語言檔案操作相關C語言
- IO流上:概述、字元流、緩衝區(java基礎)字元Java
- 緩衝區分析
- C語言庫函式及示例C語言函式
- C語言函式sscanf()的用法C語言函式
- C語言解讀assert函式C語言函式