當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 setvbuf()用法及代碼示例



描述

C庫函數int setvbuf(FILE *stream, char *buffer, int mode, size_t size)定義應如何緩衝流。

聲明

以下是 setvbuf() 函數的聲明。

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)

參數

  • stream- 這是指向標識打開流的 FILE 對象的指針。

  • buffer− 這是用戶分配的緩衝區。如果設置為 NULL,該函數會自動分配指定大小的緩衝區。

  • mode- 這指定了文件緩衝的模式 -

不。 模式和描述
1

_IOFBF

Full buffering− 在輸出時,一旦緩衝區已滿就寫入數據。在輸入時,當請求輸入操作並且緩衝區為空時填充緩衝區。

2

_IOLBF

Line buffering- 在輸出時,當一個換行符插入到流中或緩衝區已滿時寫入數據,先發生什麽。在輸入時,當請求輸入操作並且緩衝區為空時,緩衝區被填充直到下一個換行符。

3

_IONBF

No buffering− 不使用緩衝區。每個 I/O 操作都會盡快寫入。緩衝區和大小參數被忽略。

  • size- 這是緩衝區大小(以字節為單位)

返回值

此函數在成功時返回零,否則返回非零值。

示例

下麵的例子展示了 setvbuf() 函數的用法。

#include <stdio.h>

int main () {
   char buff[1024];

   memset( buff, '\0', sizeof( buff ));

   fprintf(stdout, "Going to set full buffering on\n");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "This is tutorialspoint.com\n");
   fprintf(stdout, "This output will go into buff\n");
   fflush( stdout );

   fprintf(stdout, "and this will appear when programm\n");
   fprintf(stdout, "will come after sleeping 5 seconds\n");

   sleep(5);

   return(0);
}

讓我們編譯並運行上麵的程序以產生以下結果。這裏程序不斷將輸出緩衝到buff直到它第一次調用 fflush(),之後它再次開始緩衝輸出並最終休眠 5 秒。它在程序出來之前將剩餘的輸出發送到 STDOUT。

Going to set full buffering on
This is tutorialspoint.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds

相關用法


注:本文由純淨天空篩選整理自 C library function - setvbuf()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。