程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 比較C說話中的setbuf()函數和setvbuf()函數的應用

比較C說話中的setbuf()函數和setvbuf()函數的應用

編輯:關於C++

比較C說話中的setbuf()函數和setvbuf()函數的應用。本站提示廣大學習愛好者:(比較C說話中的setbuf()函數和setvbuf()函數的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是比較C說話中的setbuf()函數和setvbuf()函數的應用正文


C說話setbuf()函數:把緩沖區與流相干聯
頭文件:

#include <stdio.h>

函數setbuf()用於將指定緩沖區與特定的文件流相干聯,完成操作緩沖區時直接操作文件流的功效。其原型以下:

void setbuf(FILE * stream, char * buf);

【參數】stream為文件流指針,buf為緩沖區的肇端地址。


假如參數buf 為NULL 指針,則為無緩沖,setbuf()相當於挪用setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZE)。

解釋:在翻開文件流後,讀取內容之前,可以挪用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()函數:設置文件流的緩沖區
頭文件:

 #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()可以用來設置文件流的緩沖區(並且必需是如許)。

【實例】為文件設置特別類型緩沖區。

#include <stdio.h> 
int main(void) 
{ 
  FILE *input, *output; 
  char bufr[512]; 
  input = fopen("file.in", "w+");   /*翻開文件*/
  output = fopen("file.out", "w");
  if (setvbuf(input, bufr, _IOFBF, 512) != 0) /*掉敗*/
  {
   printf("failed to set up buffer for input file\n");
  }
  else 
  {
   printf("buffer set up for input file\n"); 
}
  if (setvbuf(output, NULL, _IOLBF, 132) != 0) /*為流指定特別的緩沖區*/
  {
   printf("failed to set up buffer for output file\n"); 
}
  else 
  {
   printf("buffer set up for output file\n"); 
  }
  fclose(input); 
  fclose(output); 
  return 0; 
}

運轉成果:

Buffer set up for input file
Buffer set up for output file

法式先翻開兩個文件,分離設置緩沖區,依據前往值剖斷能否勝利,最初應用fclose函數封閉這兩個文件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved