C-standard-library-c-function-setvbuf

提供:Dev Guides
移動先:案内検索

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オブジェクトへのポインタです。
  • バッファ-これはユーザーが割り当てたバッファです。 NULLに設定すると、関数は指定されたサイズのバッファーを自動的に割り当てます。
  • mode -ファイルのバッファリングのモードを指定します-
Sr.No. Mode & Description
1

_IOFBF

フルバッファリング-出力では、バッファがいっぱいになるとデータが書き込まれます。 入力時、入力操作が要求され、バッファが空の場合、バッファがいっぱいになります。

2

_IOLBF

行バッファリング-出力では、改行文字がストリームに挿入されたとき、またはバッファがいっぱいになったときにデータが書き込まれます。 入力では、入力操作が要求されてバッファーが空になると、バッファーは次の改行文字までいっぱいになります。

3

_IONBF

バッファリングなし-バッファは使用されません。 各I/O操作はできるだけ早く書き込まれます。 バッファーとサイズのパラメーターは無視されます。

  • サイズ-これはバイト単位のバッファサイズです

戻り値

この関数は成功するとゼロを返し、そうでなければゼロ以外の値を返します。

次の例は、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 finddevguides.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);
}

上記のプログラムをコンパイルして実行し、次の結果を生成しましょう。 ここで、プログラムはfflush()の最初の呼び出しに直面するまで出力を buff にバッファリングし続けます。その後、再び出力のバッファリングを開始し、最終的に5秒間スリープします。 プログラムが出てくる前に、残りの出力をSTDOUTに送ります。

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