![]() |
![]() |
|
|
入出力を操作する関数
この節では、標準入出力またはファイルのストリームに対して、フィールド化バッファの入力や出力を行うための関数を説明します。
Fread および Fwrite
I/O 関数の Fread および Fwrite は、標準 I/O ライブラリを操作します。
int Fread(FBFR *fbfr, FILE *iop)
int Fwrite(FBFR *fbfr, FILE *iop)
入出力先のストリームは、FILE 型のポインタ引数によって決定されます。この引数は、通常の標準 I/O ライブラリ関数を使用して設定しなければなりません。
以下のように Fwrite を使用すると、フィールド化バッファを標準 I/O ストリームに書き込むことができます。
if (Fwrite(fbfr, iop) < 0)
F_error("pgm_name");
以下のように Fread を使用すると、Fwrite を書き込んだバッファを読み取ることができます。
if(Fread(fbfr, iop) < 0)
F_error("pgm_name");
fbfr が指すフィールド化バッファの内容は、読み込まれたフィールド化バッファの内容で置き換えられますが、フィールド化バッファの容量 (バッファ・サイズ) は変更されません。
Fwrite は、バッファのインデックスを削除し、Fusedから返されたフィールド化バッファの使用済みの部分のみを書き込みます。
Fread は、Findex を呼び出すことによってバッファのインデックスを復元します。バッファのインデックス付けには、Fwrite で書き込まれた時と同じインデックス付けの間隔が使用されます。Fread32 は、FLD_PTR 型のフィールドを無視します。
詳細については、『BEA Tuxedo FML リファレンス』の「Fread、Fread32(3fml)」および「Fwrite、Fwrite32(3fml)」を参照してください。
Fchksum
以下のようにチェックサムを算出して、I/O の妥当性をチェックできます。
long chk;
. . .
chk = Fchksum(fbfr);
Fchksum を呼び出し、フィールド化バッファと共にチェックサムの値を書き出し、入力時にその値をチェックする処置は、ユーザの責任です。Fwrite は、チェックサムの自動的な書き込みは行いません。ポインタ・フィールド (FLD_PTR) の場合は、ポインタまたはポインタが参照するポインタではなく、チェックサムの計算に使用するポインタ・フィールド名が含まれます。
詳細については、『BEA Tuxedo FML リファレンス』の「Fchksum、Fchksum32(3fml)」を参照してください。
Fprint および Ffprint
Fprint は、フィールド化バッファをテキスト形式で標準出力に出力します。
Fprint(FBFR *fbfr)
fbfr は、フィールド化バッファに対するポインタです。
Ffprint は、Fprint とよく似ていますが、次の例のように、テキストを指定された出力ストリームに出力します。
Ffprint(FBFR *fbfr, FILE *iop)
以下はパラメータの説明です。
これらの各出力関数は、フィールド・オカレンスごとに、フィールド名とフィールド値をタブで区切って出力し、復帰改行文字を追加します。Fname は、フィールド名の判別に使用しますが、フィールド名を判別できないと、フィールド識別子を出力します。文字列または文字配列のフィールド値内の表示不能な文字は、バックスラッシュとその後に続く 2 文字からなる 16 進値で表現されます。テキスト内に現れるバックスラッシュは、もう 1 つバックスラッシュを使用するとエスケープされます。バッファの出力が完了すると空白行が出力されます。
値が FLD_PTR 型の場合、Fprint32 はフィールド名またはフィールド識別子と 16 進法のポインタ値を出力します。この関数はポインタ情報を出力しますが、 Fextread32 関数はフィールド型 FLD_PTR を無視します。
値が FLD_FML32 型の場合、Fprint32 は、入れ子の各レベルの先頭にタブを付けて FML32 バッファを再帰的に出力します。値が FLD_VIEW32 型の場合、この関数は、VIEW32 フィールド名と構造体メンバ名/値の対を出力します。
詳細については、『BEA Tuxedo FML リファレンス』の「Fprint、Fprint32(3fml)」を参照してください。
Fextread
Fextread を使用すると、フィールド化バッファを、その出力形式、つまり Fprintの出力から作成できます (Fprint で出力された 16 進値が正しく解釈されます)。
int
Fextread(FBFR *fbfr, FILE *iop)
Fextread は、Fprint の出力形式で、フィールド名とフィールド識別子の組み合わせの前指定する、次のオプション・フラグを受け付けます。
フラグ |
指定内容 |
---|---|
+ |
バッファ内でフィールドを変更します。 |
- |
バッファからフィールドを削除します。 |
= |
フィールドを別のフィールドに代入します。 |
# |
コメント行です。これは無視されます。 |
フラグが指定されていない場合、デフォルトでは、Fadd によりフィールドが追加されます。 複数行にわたってフィールド値を指定するには、2 行目以降の行頭にタブを入力します。このタブは無視されます。単一の空白行は、バッファの終了を示します。連続した複数の空白行を指定すると、NULL バッファが生成されます。埋め込み型のバッファに対して Fextread を実行すると、入れ子状の FML32 バッファ (FLD_FML32) と VIEW32 フィールド (FLD_VIEW32) が生成されます。Fextread32 は、FLD_PTR 型のフィールドを無視します。 エラーが発生すると、-1 が返され、Ferror が適宜設定されます。ファイルの終わりに達しても空白行が現れないと、Ferror に FSYNTAX が設定されます。 詳細については、『BEA Tuxedo FML リファレンス』の「Fextread、Fextread32(3fml)」を参照してください。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|