setbuf() - バッファリングの制御

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3

両方  

形式

#include <stdio.h>

void setbuf(FILE *__restrict__stream, char *__restrict__buffer);

機能説明

指定された stream のバッファリングを制御します。stream ポインターはオープン・ファイルを指していなくては なりません。また、setbuf() はストリームにおける最初の操作でなくてはな りません。

buffer 引数が NULL 以外の場合には、stream はバッファーに 入れられません。そうでない場合には、バッファリング・モードはフル・バッファーになり、buffer は、少なくとも BUFSIZ の (stdio.h ヘッダー・ ファイルで定義されたバッファー・サイズである) 長さの文字配列を指している 必要があります。入出力関数は、指定された stream のためのデフォルト・システム割り振り バッファーの代わりに、入出力バッファリングのための buffer (ユーザーが ここで指定) を使用します。バッファーが z/OS® XL C/C++ 製品の要件を満たしていない場合、このバッファーは使用されません。

バッファリングのタイプとバッファー・サイズを指定することができるので、setvbuf() 関数は setbuf() よりも柔軟性があります。

注: setvbuf() または setbuf() を使用して、ストリーム独自のバッファーを定義する場合は、バッファーと関連したストリームの全使用時間を通してバッファーが使用可能であることを確認する必要があります。

例えば、バッファーが自動配列 (ブロック・スコープ) で、ストリーム s と関連している場合には、ブロックによるストレージの 割り振り解除の状態にしておきます。ストリーム s の入出力操作では、割り振り解除されたストレージを使用する ことはできません。s に対する操作は、この操作が存在していないストレージへのアクセスを 試みることになるために、失敗することになります。

プログラムの活動期間を通して、バッファーが使用可能であることを保証する には、バッファーをファイル・スコープで割り振り、使用可能にします。そのためには、ファイル・スコープで宣言された array 型の ID を使用するか、もしくはストレージを (malloc() または calloc() で) 割り振り、ストレージ・アドレスをファイル・スコープで宣言されたポインターに割り当てます。

VSAM ファイル・タイプでは、バッファーに入れられない入出力はサポートされず、バッファーに入れられない入出力に対する要求が失敗する原因となります。

戻り値

setbuf() は、値を戻しません。

errno 値、および設定する可能性のあるバッファーの詳細は、「z/OS XL C/C++ プログラミング・ガイド」のバッファリングに関する説明を参照してください。

CELEBS01
⁄* CELEBS01                                      

   This example opens the file myfile.dat for writing.                          
   It then calls the &setbuf. function to establish a buffer of                 
   length BUFSIZ.                                                               
   When string is written to the stream, the buffer buf is used                 
   and contains the string before it is flushed to the file.                    
                                                                                
 *⁄                                                                             
#include <stdio.h>                                                              
                                                                                
int main(void)                                                                  
{                                                                               
   char buf[BUFSIZ];                                                            
   char string[] = "hello world";                                               
   FILE *stream;                                                                
                                                                                
   stream = fopen("myfile.dat", "wb,recfm=f");                                  
                                                                                
   setbuf(stream,buf);       ⁄* set up buffer *⁄                                
                                                                                
   fwrite(string, sizeof(string), 1, stream);                                   
                                                                                
   printf("%s¥n",buf);       ⁄* string is found in buf now *⁄                   
                                                                                
   fclose(stream);           ⁄* buffer is flushed out to myfile.dat *⁄          
}                                                                               

関連情報