日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




入力ファイルまたは出力ファイルに新しいバッファを関連付けます。バッファリングの動作を変更することもあります。

形式

#include <stdio.h>

int setvbuf (FILE *file_ptr, char *buffer, int type, size_t size);


引数



file_ptr

ファイルへのポインタ。

buffer

文字配列へのポインタ,または NULL ポインタ。

type

バッファリング・タイプ。 <stdio.h>に定義されている, _IOFBF または _IOLBF のいずれかの値を使用します。

size

HP C RTL がこのファイルのバッファリングに使用する buffer によって使用されるバイト数。バッファ・サイズは,8192 バイト以上,32767 バイト以下でなくてはなりません。

説明

setvbuf関数は,指定されたファイルがオープンされた後,ただし I/O 操作が実行される前に使用することができます。

C RTL では, ANSI に準拠したファイル・バッファリングとして,以下のタイプが用意されています。

行バッファード I/O では,文字はメモリ領域にバッファリングされ,改行文字が現れた時点で,適切な RMS ルーチンが呼び出されてバッファ全体が送信されます。行バッファリングはシステム・オーバヘッドを軽減するのでアンバッファード I/O よりも効率的ですが,出力データをユーザまたはディスクが利用できるタイミングが遅れます。

フル・バッファード I/O では,文字はブレーク文字の有無にかかわらず,バッファがいっぱいになるまでメモリ領域内にバッファリングされます。フル・バッファリングは行バッファリングやアンバッファード I/O よりも効率的ですが,出力データが利用できるようになるタイミングは行バッファリングよりもさらに遅れます。

行バッファード I/O とフル・バッファード I/O を指定するための type 引数としては, <stdio.h>に定義されている値 _IOLBF と _IOFBF をそれぞれ使用します。

HP C RTL では, file_ptr がターミナル・デバイスを指定している場合にだけ行バッファード I/O を使用し,それ以外の場合はフル・バッファード I/O を使用します。

このマニュアルの以前の版では _IONBF もサポートの対象になっていましたが,この版ではサポートの対象から外されているので,注意してください。

HP C RTL は,個々の I/O ストリームに使用されるバッファを自動的に割り当てます。したがって,バッファ割り当てには以下に示す可能性があることになります。

  • buffer が NULL ポインタでなく, size が自動的に割り当てられるバッファよりも小さくない場合, setvbufはファイル・バッファとして buffer を使用する。

  • buffer が NULL ポインタであるか, size が自動的に割り当てられるバッファよりも小さい場合には,自動的に割り当てられるバッファがバッファ領域として使用される。

  • buffer が NULL ポインタで, size が自動的に割り当てられるバッファよりも大きい場合, setvbufは指定されたサイズの新しいバッファを割り当て,これをファイル・バッファとして使用する。

ユーザ・プログラムは,ストリームに対して I/O が実行された後には, buffer の内容に依存してはなりません。 HP C RTL は,どの I/O 操作についても, buffer を使用する場合と使用しない場合があります。

一般に, setvbufまたは setbufを使って, HP C RTL が使用するバッファ・サイズを制御する必要はありません。自動的に割り当てられるバッファ・サイズは,実行される I/O 操作の種類とデバイス特性 (ターミナル,ディスク,ソケットなど) に基づいて,効率性を念頭に置いて選択されます。

setvbufおよび setbuf関数は,バッファを導入して, stdoutストリームに大量のテキストを書き込むときの性能を改善したい場合に有用です。このストリームは,ターミナル・デバイスにバインドされているとき ( 通常のケース ) はバッファリングされておらず, setvbufまたは setbufの呼び出しによって HP C RTL バッファリングが導入されない限り,多数の OpenVMS バッファード I/O 操作が発生します。

setvbuf関数は, HP C RTL が使用するバッファリングを制御するためのみに使用され,下位の RMS I/O 操作が使用するバッファリングは制御しません。 RMS のデフォルトのバッファリング動作を変更するには,ファイルを creatfreopen,または open関数でオープンするときに,ctx,fop,rat,gbc, mbc,mbf,rfm,および rop の RMS キーワードに対して各種の値を指定します。


戻り値

0 成功を示します。
ゼロ以外の値 type または file_ptr に無効な入力値が指定されたか, file_ptr が別のスレッドによって使用されていることを示します ( 『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.8.1 項を参照)。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.