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


C語言 setbuf用法及代碼示例


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

用法:

void setbuf ( FILE * stream, char * buffer );
設置流緩衝區
指定緩衝供...使用進行I /O操作完全緩衝流。或者,如果緩衝是一個空指針,為該緩衝區禁用了緩衝,成為無緩衝流。

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

假定緩衝區至少為BUFSIZ字節大小(請參閱setvbuf以指定緩衝區的大小)。

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

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

A 全緩衝流隻要有足夠的數據,就使用緩衝區的整個大小作為緩衝區(請參見setvbuf對於其他緩衝模式)。

使用默認分配的緩衝區打開所有文件(完全緩衝)(如果已知它們不是指交互式設備)。此函數可用於設置要用作緩衝區的特定存儲塊或禁用流的緩衝。

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

對該函數的調用等同於調用setvbuf_IOFBF模式BUFSIZ尺寸(什麽時候緩衝不是null指針),或等效於使用_IONBF模式(當它為空指針時)。

參數

stream
指向一個指針FILE標識開放流的對象。
buffer
用戶分配的緩衝區。至少應BUFSIZ個字節長。
或者,可以指定空指針以禁用緩衝。

返回值

沒有。

示例

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

int main ()
{
  char buffer[BUFSIZ];
  FILE *pFile1, *pFile2;

  pFile1=fopen ("myfile1.txt","w");
  pFile2=fopen ("myfile2.txt","a");

  setbuf ( pFile1 , buffer );
  fputs ("This is sent to a buffered stream",pFile1);
  fflush (pFile1);

  setbuf ( pFile2 , NULL );
  fputs ("This is sent to an unbuffered stream",pFile2);

  fclose (pFile1);
  fclose (pFile2);

  return 0;
}


在此示例中,打開了兩個文件進行寫入。與文件關聯的流myfile1.txt設置為用戶分配的緩衝區;對其進行寫操作;數據在邏輯上是流的一部分,但是直到fflush函數被調用。
示例中與文件關聯的第二個緩衝區myfile2.txt設置為無緩衝,因此後續的輸出操作將盡快寫入設備。
但是,一旦關閉文件,最終狀態對於緩衝流和未緩衝流都是相同的(關閉文件會刷新其緩衝區)。

相關用法


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