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


C語言 setvbuf用法及代碼示例


C語言stdio頭文件(stdio.h)中setvbuf函數的用法及代碼示例。

用法:

int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
更改流緩衝
指定一個緩衝為了。該函數允許指定模式尺寸緩衝區的字節數(以字節為單位)。

如果緩衝是一個空指針,該函數自動分配一個緩衝區(使用尺寸作為使用尺寸的提示)。否則,由指向的數組緩衝可用作緩衝尺寸個字節。

一旦已與一個打開的文件相關聯,但是在對該文件執行任何輸入或輸出操作之前。

A 流緩衝區是作為I /O操作和與流相關聯的物理文件之間的中介的數據塊:對於輸出緩衝區,數據一直輸出到緩衝區,直到達到其最大容量為止,然後flushed(即:所有數據立即發送到物理文件並清除緩衝區)。同樣,從物理文件填充輸入緩衝區,然後將數據從該物理文件發送到操作,直到用盡為止,此時從文件中獲取新數據以再次填充緩衝區。

可以通過調用顯式刷新流緩衝區fflush。它們也會被自動衝洗fclosefreopen,或程序正常終止時。

使用默認分配的緩衝區打開所有文件(完全緩衝)(如果已知它們不是指交互式設備)。此函數可用於重新定義緩衝區尺寸或者模式,以定義user-allocated緩衝區或禁用流的緩衝。

默認流stdinstdout完全緩衝如果已知它們不引用交互式設備,則默認情況下為默認。否則,它們可能是行緩衝或者無緩衝默認情況下,具體取決於係統和庫的實現。同樣的道理stderr,始終是行緩衝或者無緩衝默認情況下。


參數

stream
指向一個指針FILE標識開放流的對象。
buffer
用戶分配的緩衝區。至少應尺寸個字節長。
如果設置為空指針,該函數將自動分配一個緩衝區。
mode
指定文件緩衝的模式。三個特殊的宏常量(_IOFBF_IOLBF_IONBF)在中定義<cstdio>用作此參數的值:
_IOFBF完整緩衝:在輸出時,一旦緩衝區已滿(或刷新),就將寫入數據。在輸入時,當請求輸入操作且緩衝區為空時,緩衝區將被填充。
_IOLBF行緩衝:在輸出時,在將換行符插入流中或緩衝區已滿(或刷新)時(無論先發生什麽情況),都會寫入數據。在輸入時,當請求輸入操作且緩衝區為空時,緩衝區將填充到下一個換行符。
_IONBF沒有緩衝:不使用緩衝區。每個I /O操作均應盡快寫入。在這種情況下,buffer和size參數將被忽略。
size
緩衝區大小,以字節為單位。
如果緩衝參數是一個空指針,此值可以確定函數自動為緩衝區分配的大小。

返回值

如果將緩衝區正確分配給文件,則返回零值。
否則,返回非零值;否則返回0。這可能是由於無效模式參數或分配或分配緩衝區的其他錯誤。

示例

/* setvbuf example */
#include <stdio.h>

int main ()
{
  FILE *pFile;

  pFile=fopen ("myfile.txt","w");

  setvbuf ( pFile , NULL , _IOFBF , 1024 );

  // File operations here

  fclose (pFile);

  return 0;
}


在此示例中,名為myfile.txt將創建一個文件,並為關聯的流請求一個1024字節的完整緩衝區,因此,每次填充1024字節的緩衝區時,輸出到此流的數據都應寫入文件中。

相關用法


注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C setvbuf function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。