BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   FML を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


入出力を操作する関数

この節では、標準入出力またはファイルのストリームに対して、フィールド化バッファの入力や出力を行うための関数を説明します。

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 の出力形式で、フィールド名とフィールド識別子の組み合わせの前指定する、次のオプション・フラグを受け付けます。

Fextread のフラグ

フラグ

指定内容

+

バッファ内でフィールドを変更します。

-

バッファからフィールドを削除します。

=

フィールドを別のフィールドに代入します。

#

コメント行です。これは無視されます。


 

フラグが指定されていない場合、デフォルトでは、Fadd によりフィールドが追加されます。

複数行にわたってフィールド値を指定するには、2 行目以降の行頭にタブを入力します。このタブは無視されます。単一の空白行は、バッファの終了を示します。連続した複数の空白行を指定すると、NULL バッファが生成されます。埋め込み型のバッファに対して Fextread を実行すると、入れ子状の FML32 バッファ (FLD_FML32) と VIEW32 フィールド (FLD_VIEW32) が生成されます。Fextread32 は、FLD_PTR 型のフィールドを無視します。

エラーが発生すると、-1 が返され、Ferror が適宜設定されます。ファイルの終わりに達しても空白行が現れないと、FerrorFSYNTAX が設定されます。

詳細については、『BEA Tuxedo FML リファレンス』の「Fextread、Fextread32(3fml)」を参照してください。

 

先頭へ戻る 前のトピックへ 次のトピックへ