BEA Logo BEA Tuxedo Release 8.0

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

 

   Tuxedo ホーム   |   BEA Tuxedo FML リファレンス   |   先頭へ   |   前へ   |   次へ   |   目次

 


FML 関数の紹介

形式

"#include <fml.h>"
"#include <fml32.h>"

機能説明

FML は、フィールド化バッファと呼ばれる記録構造を定義、操作する一連の C 言語関数で、フィールド化バッファにはフィールドと呼ばれる属性と値の対が含まれます。属性は、フィールドの識別子であり、関連する値は、フィールドのデータ内容を表します。

フィールド化バッファを使用すると、関連したフィールドのセットを名前でアクセスできるので、協調動作するプロセス間でパラメータ化されたデータを受け渡す場合に便利です。他のプロセスとコミュニケートする必要のあるプログラムは、FML ソフトウェアを使用し、フィールドを含む構造体を意識せずにフィールドへのアクセスが可能です。

FML はまた、VIEW と呼ばれる、フィールド化バッファを C 構造体にマップする (その逆も可能) 機能も提供します。VIEW はフィールド化バッファではなく構造体間で、大量のデータのやり取りを行います。データを構造体に転送し操作すると、アプリケーションはより高速に実行します。VIEW を使用すると、フィールド化バッファのデータ独立性と従来のレコード構造の効率性、簡便性を共に享受することができます。

FML16 と FML32

FML には 2 つのサイズがあります。オリジナルの FML インターフェイスは、フィールド長に 16 ビットの値を使用して、フィールドを識別する情報を格納します。このマニュアル・ページでは、これらを FML16 と呼びます。FML16 では、一意のフィールド数は 8191、個々のフィールド長は最大 64K バイト、フィールド化バッファの総容量は 64K に制限されます。このインターフェイスの定義、型および関数プロトタイプは、fml.h に定義され、FML16 インターフェイスを使用するアプリケーション・プログラムは、このファイルをインクルードする必要があります。FML32 は、フィールド長と識別子に 32 ビット値を使用します。ほぼ 3000 万個のフィールドを含むことができ、フィールドとバッファ長はほぼ 20 億バイトまで使用できます。FML32 の定義、型および関数プロトタイプは、fml32.h に定義されます。FML32 のすべての定義、型、関数名には、接尾辞 "32" が付きます (MAXFBLEN32FLDID32Fchg32() など)。また、環境変数にも接尾辞 "32" が付きます (FLDTBLDIR32FIELDTBLS32VIEWFILES32VIEWDIR32 など)。

FML バッファ

フィールド化バッファは、フィールド識別子とフィールド値の対 (longshort など固定長フィールドの場合)、またはフィールド識別子、フィールド長、フィールド値の三揃い (可変長フィールドの場合) で構成されます。

フィールド識別子は、フィールド化バッファ内の個々のデータ項目に対するタグで、フィールド番号とフィールドのデータ型で構成されます。FML16 では、フィールド識別子は 1 から 8191 の範囲で、その型定義は FLDID です。FML32 では、1 から 33,554,431 の範囲で、型定義は FLDID32 です。BEA Tuxedo ATMI システムは、フィールド数に関する以下の規則に従っています。

FML16 のフィールド番号

FML32 のフィールド番号

予約済み

使用可能

予約済み

使用可能

1〜100

101〜8191

1〜10,000、
30,000,001〜33,554,431

10,001〜30,000,000

BEA Tuxedo ATMI システムでは強制的に使用不可にはなっていませんが、アプリケーションが予約番号を使用しないようにしてください。

フィールドの型は、標準 C 言語の型のいずれでもかまいません (shortlongfloatdoublechar)。ほかに、string (ヌル文字で終了する文字列)、carray (文字配列)、ポインタ (バッファへのポインタ)、FML32 バッファ (埋め込み型 FML32 バッファ)、および VIEW32 (埋め込み型 VIEW32 バッファ) がサポートされています。これらの型は fml.h fml32.h に、FLD_SHORTFLD_LONGFLD_CHARFLD_FLOATFLD_DOUBLEFLD_STRINGFLD_CARRAYFLD_PTRFLD_FML32、および FLD_VIEW32 として定義されています。

FML16 では、フィールド化バッファのポインタは、FBFR * 型、フィールド長は FLDLEN 型、フィールドのオカレンス数は FLDOCC 型です。FLM32 では、フィールド化バッファのポインタは FBFR32 * 型、フィールド長は FLDLEN32 型、フィールドのオカレンス数は FLDOCC32 です。

フィールドは、FML インターフェイスのフィールド識別子により参照されます。ただし通常は、アプリケーション・プログラマにはフィールド名を覚える方が簡単です。フィールド名をフィールド識別子にマップするには、2 つの方法があります。

フィールド名と識別子のマッピングは、field_tables(5) に記述されるフィールド・テーブル・ファイルにより、実行時に FML プログラムで行うことができます。FML16 インターフェイスでは、環境変数 FLDTBLDIR を使用し、フィールド・テーブルを検索するディレクトリのリストを指定します。また FIELDTBLS により、使用するテーブル・ディレクトリ内のファイルのリストを指定します。FML32 インターフェイスでは、FLDTBLDIR32FIELDTBLS32 を使用します。アプリケーション・プログラムでは、FML 関数の Fldid()Fldid32() が、実行時にフィールド名をフィールド識別子に変換します。また Fname()Fname32() は、フィールド識別子をフィールド名に変換します。

コンパイル時のフィールド名と識別子のマッピングは、フィールド名のマクロ定義を含むフィールド・ヘッダ・ファイルを使用して行われます。mkfldhdr()mkfldhdr32() は、フィールド・テーブル・ファイルからヘッダ・ファイルを作成するための関数です (mkfldhdr、mkfldhdr32(1) を参照)。これらのヘッダ・ファイルは、C プログラムの #include で指定されるファイルで、コンパイル時にフィールド名をフィールド識別子にマップすることができます。

フィールド化バッファ内のフィールドは、複数回出現する場合があります。FML 関数の多くが、検索または変更の対象にするフィールド・オカレンスを指定する引数を取ります。フィールドが複数回出現する場合、オカレンスは、最初のオカレンスを 0 として、順次番号付けされます。すべてのオカレンスが集まると、論理的なシーケンスを構成しますが、オカレンス番号に対応するオーバヘッドはありません (つまり、オカレンス番号はフィールド化バッファに格納されません)。フィールド・オカレンスを追加すると、そのオカレンスは、オカレンスの集まりの最後に追加され、一番高い番号より 1 つ高い番号のオカレンスとして参照されます。一番高い番号のオカレンス以外のオカレンスを削除すると、削除されたオカレンスより高い番号のオカレンスはすべて、1 つだけ下位にシフトします (たとえば、オカレンス 6 がオカレンス 5 になり、オカレンス 5 がオカレンス 4 になります)。

フィールド化バッファに多数のフィールドが含まれる場合、内部インデックスを使用すると、FML でのアクセスが促進されます。通常、ユーザはこのインデックスの存在を意識することはありません。フィールド化バッファをディスクに格納したり、プロセス間またはコンピュータ間で転送する場合は、まず Funindex() または Funindex32() を使用してこのインデックスを削除すると、ディスク領域や転送時間を節約できます。後でインデックスが必要になれば、Findex() または Findex32() を使用して再び作成します。

FML16 から FML32 への変換

適切に書かれた既存の FML16 アプリケーションは、容易に FML32 インターフェイスを使用するように変更できます。FML 関数の呼び出しに用いるすべての変数には、適切な typedef (FLDIDFLDLEN および FLDOCC) を使用する必要があります。FML 型付きバッファのための tpalloc() 呼び出しには、FML ではなく FMLTYPE 定義を使用します。アプリケーション・プログラムのソース・コードに fml32.h を含め、その後に fml1632.h を配置し、32 ビット関数が使用できるように変更します。fml1632.h には、すべての 16 ビットの型定義を 32 ビットに変換するマクロと、16 ビット関数とマクロを 32 ビットに変換するマクロが含まれます。

VIEWS

VIEWS は、フィールド操作言語の一部です。この機能を使用すると、フィールドと C 構造体のメンバとのマッピングの指定によって、フィールド化バッファと C 言語プログラムの C 構造体の間でデータを受け渡しすることができます。フィールド化バッファ情報を大量に操作する場合は、データを C 構造体内に転送するとパフォーマンスが向上します。VIEWS 関数でフィールド化バッファ内の情報をバッファ内のフィールドから抽出して C 構造体に入れ、C 構造体内でデータを操作した後、再度 VIEWS 関数を使用して、更新した値をフィールド化バッファに戻すことができます。

型付きバッファは、フィールド化バッファという FML の概念に基づいた ATMI 環境の機能の 1 つです。ATMI 環境とともに納入される 2 種類の標準バッファは、FML 型付きバッファと VIEW 型付きバッファです。このバッファがさらに異なる点は、VIEW バッファは FML フィールド化バッファとの関連性がまったくなくてもよいということです。また FML32VIEW32 のバッファ型が使用される点でも異なります。

VIEW 記述は、viewfile(5) で解説されるようにソース viewfile に作成、格納されます。VIEW 記述は、フィールド化バッファ内のフィールドを C 構造体内のメンバにマップします。ソース VIEW 記述は、viewc() または viewc32() でコンパイルされ、VIEW オブジェクト・ファイルを生成します。これが、フィールド化バッファと C プログラムの C 構造体の間で転送されるデータのマッピングに使用されます (『BEA Tuxedo コマンド・リファレンス』のviewc、viewc32(1) を参照)。また、VIEW コンパイラはアプリケーション・プログラム内に含まれる C 言語のヘッダ・ファイルを作成し、VIEW 記述で記述される構造体を定義します。VIEW 逆アセンブラである viewdis() または viewdis32() は、オブジェクト VIEW 記述を読み取り可能な形式に変換する (つまり、ソース VIEW 記述に戻す) ためのものです。逆アセンブラの出力は、VIEW コンパイラに再入力できます (『BEA Tuxedo コマンド・リファレンス』のviewdis、viewdis32(1) を参照)。

オブジェクト・ファイルは実行時に使用され、VIEWFILESVIEWDIR 環境変数を用いて VIEW 構造体を操作します。VIEWFILES には、アプリケーションのためのコンマで区切ったオブジェクト viewfile のリストが含まれている必要があります。絶対パス名で指定されたファイルはそのまま使用されます。相対パス名でリストされたファイルは VIEWDIR 変数により指定されたディレクトリのリストにあるかどうかが検索されます (下記参照)。VIEWDIR は、相対ファイル名を持つ VIEW オブジェクト・ファイルの検索に使用する、コンマで区切られたディレクトリ・リストを指定します。VIEW32 構造では、VIEWFILES32 および VIEWDIR32 が使用されます。

大半の FML 関数によってサポートされているデータ型以外に、VIEWS はソース VIEW 記述内で int 型を間接的にサポートします。VIEW 記述がコンパイルされると、VIEW コンパイラは、使用中のマシンの種類によって、すべての int 型を short 型か long 型に自動的に変換します。

VIEWS は、10 進数データ型もサポートしています。これは dec_t 型のフィールドとして定義され、パック 10 進値は総バイト数と小数点以下のバイト数として表されます。このようなフィールドは、FML では直接サポートされていませんが、このフィールドと、FML でサポートされているほかのフィールドとの変換は自動的に行われます。パック 10 進数は、COBOL 環境では 2 桁の 10 進数が 1 バイトにパックされ、下位バイトに符号が格納されます。C 環境では、データ型は 10 進指数、符号、桁、およびパック 10 進数の値を含む dec_t 型定義で定義されます。

FML バッファは、Fvftos() または Fvftos32() を使用して、VIEW に変換できます。view は、Fvstof() または Fvstof32() を使用して、フィールド化バッファに変換できます。フィールド化バッファと構造体の間でデータ転送を行うと、ソース・データは自動的に宛て先データの型に変換されます。フィールドの複数オカレンスがサポートされています。これは構造体中の配列として扱われます。ヌルの値は構造体の空のメンバを表すのに使用し、viewfile の構造体の各メンバに対して指定できます。メンバにヌルの値を指定しないと、省略時のヌルの値が使用されます。また C 構造体のメンバとフィールド化バッファ内のフィールドの間にマッピングが存在していても、それらの間でのデータの転送を禁止することができます。

VIEW は、目標レコード形式から、および目標レコード形式に変換することもできます。省略時の形式は、IBM System/370 の COBOL レコードです。Fvstot() 関数が、バイトの位、浮動小数点値と 10 進数形式、および文字セット (ASCII から EBCDIC へ) の変換を処理し、Fvttos() が本来の形式に戻します。これらの関数には、32 ビット・バージョンもあります。Fcodeset() 関数は、代替 ASCII/EBCDIC トランザクション・テーブルの指定に使用できます。

エラー処理

ほとんどの FML 関数は、1 つまたは複数の戻り値を返します。そうでない場合は、エラー条件が示されます。通常、エラーであれば -1、不正なフィールド識別子 (BADFLDID) またはアドレスであれば 0 です。またエラー・タイプが、外部整数 Ferror (FML16 の場合)、あるいは Ferror32 (FML32 の場合) として得られます。FerrorFerror32 は、正常呼び出しではクリアされないので、エラーが示された後でのみテストします。

F_error()F_error32() 関数は、標準エラー出力にメッセージを出力します。この関数は、パラメータを 1 つ(文字列)取り、コロンと空白を付加してその引数文字列を出力します。次に、エラー・メッセージとその後に続く復帰改行文字を出力します。表示されるエラー・メッセージは、エラー発生時に設定された FerrorFerror32 内の現在のエラー番号に対して定義されているメッセージです。

メッセージ・カタログからエラー・メッセージのテキストを検索するには、Fstrerror(3fml)と、その対をなす Fstrerror32 (3fml)を使用することができます。これらは、userlog(3c) への引数として使用できるポインタを返します。

FML 関数が生成するエラー・コードは、それぞれの FML マニュアル・ページに記載されています。

関連項目

CFadd、CFadd32(3fml)CFchg、CFchg32(3fml)CFfind、CFfind32(3fml)CFfindocc、CFfindocc32(3fml)CFget、CFget32(3fml)CFgetalloc、CFgetalloc32(3fml)F_error、F_error32(3fml)Fadd、Fadd32(3fml)Fadds、Fadds32(3fml)Falloc、Falloc32(3fml)Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)Fboolpr、Fboolpr32、Fvboolpr、Fvboolpr32(3fml)Fchg、Fchg32(3fml)Fchgs、Fchgs32(3fml)Fchksum、Fchksum32(3fml)Fcmp、Fcmp32(3fml)Fconcat、Fconcat32(3fml)Fcpy、Fcpy32(3fml)Fdel、Fdel32(3fml)Fdelall、Fdelall32(3fml)Fdelete、Fdelete32(3fml)Fextread、Fextread32(3fml)Ffind、Ffind32(3fml)Ffindlast、Ffindlast32(3fml)Ffindocc、Ffindocc32(3fml)Ffinds、Ffinds32(3fml)Ffloatev、Ffloatev32、Fvfloatev、Fvfloatev32(3fml)Ffprint、Ffprint32(3fml)Ffree、Ffree32(3fml)Fget、Fget32(3fml)Fgetalloc、Fgetalloc32(3fml)Fgetlast、Fgetlast32(3fml)Fgets、Fgets32(3fml)Fgetsa、Fgetsa32(3fml)Fidnm_unload、Fidnm_unload32(3fml)Fidxused、Fidxused32(3fml)Fielded、Fielded32(3fml)Findex、Findex32(3fml)Finit、Finit32(3fml)Fjoin、Fjoin32(3fml)Fldid、Fldid32(3fml)Fldno、Fldno32(3fml)Fldtype、Fldtype32(3fml)Flen、Flen32(3fml)Fmkfldid、Fmkfldid32(3fml)Fmove、Fmove32(3fml)Fname、Fname32(3fml)Fneeded、Fneeded32(3fml)Fnext、Fnext32(3fml)Fnmid_unload、Fnmid_unload32(3fml)Fnum、Fnum32(3fml)Foccur、Foccur32(3fml)Fojoin、Fojoin32(3fml)Fpres、Fpres32(3fml)Fprint、Fprint32(3fml)Fproj、Fproj32(3fml)Fprojcpy、Fprojcpy32(3fml)Fread、Fread32(3fml)Frealloc、Frealloc32(3fml)Frstrindex、Frstrindex32(3fml)Fsizeof、Fsizeof32(3fml)Fstrerror、Fstrerror32(3fml)Ftypcvt、Ftypcvt32(3fml)Ftype、Ftype32(3fml)Funindex、Funindex32(3fml)Funused、Funused32(3fml)Fupdate、Fupdate32(3fml)Fused、Fused32(3fml)Fvall、Fvall32(3fml)Fvals、Fvals32(3fml)Fvftos、Fvftos32(3fml)Fneeded、Fneeded32(3fml)Fvnull、Fvnull32(3fml)Fvopt、Fvopt32(3fml)Fvselinit、Fvselinit32(3fml)Fvsinit、Fvsinit32(3fml)Fvstof、Fvstof32(3fml)Fwrite、Fwrite32(3fml)field_tables(5)viewfile(5)

『FML を使用した BEA Tuxedo アプリケーションのプログラミング』

 

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