C語言setvbuf()函式:設定檔案流的緩衝區

2puT發表於2016-07-14
標頭檔案:#include <stdio.h>

函式setvbuf()用來設定檔案流的緩衝區,其原型為:
    int setvbuf(FILE * stream, char * buf, int type, unsigned size);

【引數】stream為檔案流指標,buf為緩衝區首地址,type為緩衝區型別,size為緩衝區內位元組的數量。

引數型別type說明如下:
  • _IOFBF (滿緩衝):當緩衝區為空時,從流讀入資料。或當緩衝區滿時,向流寫入資料。
  • _IOLBF (行緩衝):每次從流中讀入一行資料或向流中寫入—行資料。
  • _IONBF (無緩衝):直接從流中讀入資料或直接向流中寫入資料,而沒有緩衝區。

【返回值】成功返回0,失敗返回非0。

該函式涉及流和緩衝區的知識,請參考C語言流和緩衝區(快取)專題。

如果您只是想簡單的操作緩衝區,還可以使用setbuf()函式,請檢視:C語言setbuf()函式

setbuf()和setvbuf()函式的實際意義在於:使用者開啟一個檔案後,可以建立自己的檔案緩衝區,而不必使用fopen()函式開啟檔案時設定的預設緩衝區。這樣就可以讓使用者自己來控制緩衝區,包括改變緩衝區大小、定時重新整理緩衝區、改變緩衝區型別、刪除流中預設的緩衝區、為不帶緩衝區的流開闢緩衝區等。

說明:在開啟檔案流後,讀取內容之前,呼叫setvbuf()可以用來設定檔案流的緩衝區(而且必須是這樣)。

【例項】為檔案設定特殊型別緩衝區。
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. FILE *input, *output;
  5. char bufr[512];
  6. input = fopen("file.in", "w+"); /*開啟檔案*/
  7. output = fopen("file.out", "w");
  8. if (setvbuf(input, bufr, _IOFBF, 512) != 0) /*失敗*/
  9. {
  10. printf("failed to set up buffer for input file\n");
  11. }
  12. else
  13. {
  14. printf("buffer set up for input file\n");
  15. }
  16. if (setvbuf(output, NULL, _IOLBF, 132) != 0) /*為流指定特殊的緩衝區*/
  17. {
  18. printf("failed to set up buffer for output file\n");
  19. }
  20. else
  21. {
  22. printf("buffer set up for output file\n");
  23. }
  24. fclose(input);
  25. fclose(output);
  26. return 0;
  27. }
執行結果:
Buffer set up for input file
Buffer set up for output file

程式先開啟兩個檔案,分別設定緩衝區,根據返回值判定是否成功,最後使用fclose函式關閉這兩個檔案。

相關文章