標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#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() よりも柔軟性があります。
例えば、バッファーが自動配列 (ブロック・スコープ) で、ストリーム s と関連している場合には、ブロックによるストレージの 割り振り解除の状態にしておきます。ストリーム s の入出力操作では、割り振り解除されたストレージを使用する ことはできません。s に対する操作は、この操作が存在していないストレージへのアクセスを 試みることになるために、失敗することになります。
プログラムの活動期間を通して、バッファーが使用可能であることを保証する には、バッファーをファイル・スコープで割り振り、使用可能にします。そのためには、ファイル・スコープで宣言された array 型の ID を使用するか、もしくはストレージを (malloc() または calloc() で) 割り振り、ストレージ・アドレスをファイル・スコープで宣言されたポインターに割り当てます。
VSAM ファイル・タイプでは、バッファーに入れられない入出力はサポートされず、バッファーに入れられない入出力に対する要求が失敗する原因となります。
setbuf() は、値を戻しません。
errno 値、および設定する可能性のあるバッファーの詳細は、「z/OS XL C/C++ プログラミング・ガイド」のバッファリングに関する説明を参照してください。
⁄* 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 *⁄
}