ページの先頭行へ戻る
Interstage Job Workload Server V9.2.0 バッチ開発ガイド

2.5.3 C言語アプリケーション

C言語アプリケーションについて説明します。

2.5.3.1 C言語アプリケーションの形態

C言語アプリケーションの形態について説明します。

アプリケーションの形態

バッチアプリケーションの形態は、C言語アプリケーションの副プログラムです。バッチアプリケーションは、C言語アプリケーションの副プログラムとして設計します。

アプリケーションからのライブラリ呼出し

バッチアプリケーションからC言語や他言語で作成したライブラリを呼び出すことができます。バッチアプリケーションから呼び出すライブラリの設計は、C言語プログラムの開発と同じです。

2.5.3.2 C言語アプリケーションのインタフェース

バッチジョブ定義で設定した入力パラメタを、バッチアプリケーション(C言語アプリケーション)に渡すことができます。また、バッチアプリケーションからの復帰コードは、ジョブステップの終了コードになります。これにより、バッチアプリケーションからの復帰コードで、後続ジョブステップを実行するかを制御できます。
バッチジョブ定義とバッチアプリケーションの入力パラメタ、および復帰コードの関係を以下に示します。

バッチアプリケーションには、以下のインタフェースがあります。

詳細を以下で説明します。

入力パラメタ

入力パラメタについて説明します。

入力パラメタの構成

バッチジョブ定義のジョブステップ定義のバッチアプリケーション定義にあるパラメタに設定した値が、バッチアプリケーションの入力パラメタとして渡されます。入力パラメタのデータ型は、IDLファイルに設定します。
IDLファイルは、1バッチアプリケーションにつき、1つ作成します。
バッチジョブ定義に設定したパラメタの値が、バッチアプリケーションのパラメタに渡されるイメージは以下のとおりです。

IDLファイルの設定項目

C言語アプリケーションに入力パラメタを渡す場合は、IDLファイルが必要になります。入力パラメタが必要ない場合でも、IDLファイルは必要です。入力パラメタが複数個ある場合は、1つのIDLファイルにまとめます。
IDLファイルの設定例を以下に示します。

module module1{
    interface func1{
        long pgm1( 
          in short parm1,      /* INパラメタ(数値型2バイト) */
          in long parm2,       /* INパラメタ(数値型4バイト) */
          in long long parm3,  /* INパラメタ(数値型8バイト) */
          in  string parm4     /* INパラメタ(英数字項目) */
        );
    };
};

C言語アプリケーションのデータ型、バッチアプリケーション定義のパラメタのデータ型およびIDLファイルのデータ型の対応関係は以下のとおりです。

C言語のデータ型

パラメタのデータ型

IDLファイルのデータ型

short

short : 数値型(2バイト)項目

short

int

int : 数値型(4バイト)項目

long

long long

long long : 数値型(8バイト)項目

long long

char*

char : 英数字項目

string

復帰コード

バッチアプリケーションの復帰コードを決定します。
また、バッチ実行基盤で使用できるユーザアプリケーションの復帰コードは、ジョブのジョブステップ終了コードとジョブ終了コードにもなります。

復帰コードのデータ型

バッチ実行基盤で使用できるユーザアプリケーションの復帰コードのデータ型は、以下のとおりです。

C言語データ型

int


復帰コードの範囲と値

バッチ実行基盤で実行するユーザアプリケーションの復帰コードの範囲は、以下のとおりです。

復帰コードの範囲

-999999999~999999999

環境変数

バッチアプリケーションで使用する環境変数です。
バッチアプリケーションが使用できる環境変数には以下があります。


バッチアプリケーション定義の環境変数、およびジョブ定義の環境変数を使用したバッチアプリケーション間の、環境変数によるデータの引継ぎはできません。

ファイル資源の割当て

ファイル管理機能が、バッチジョブ定義に設定した資源名とファイルの物理的なパスの対応関係を環境変数に設定しバッチアプリケーションに通知します。これにより、バッチアプリケーションに直接、物理的なパスを記述しないでファイルをアクセスできます。

以下にファイルのアクセス方法について示します。(例でのパス名などは、SolarisおよびLinuxの形式で記載しています。)

バッチジョブ定義で資源名“DAT1”を設定します。資源名“DAT1”は“/data/2006/”に割り当てられているファイル“file1”です。バッチアプリケーションでは、環境変数名“DAT1”に対してgetenvを実行して、取り出した文字列を指定してファイルをアクセスします。取り出した文字列に、該当する物理ファイル名とファイルの割当て場所が取り込まれているため、“/data/2006/”に割り当てられているファイル“file1”をアクセスできます。


ファイルの物理的なパスを変更する場合は、“2.4.3 ファイルパスの論理化機能”を利用することでバッチジョブ定義およびバッチアプリケーションの汎用性が高くなります。

2.5.3.3 C言語アプリケーションの注意事項

プロセスの操作について

バッチアプリケーション内で、子プロセスの生成、監視などのプロセスに関する操作を行わないでください。
プロセスの操作を行った場合、ジョブの動作は保証しません。

スレッドの操作について

バッチアプリケーション内で、スレッドの生成、監視などのスレッドに関する操作を行わないでください。
スレッドに関する操作を行った場合、ジョブの動作は保証しません。

atexit関数の使用について

バッチアプリケーションで、atexit関数を使用しないでください。使用方法を誤るとワークユニットの停止処理がハングアップする可能性があります。

iconv関数の使用について

バッチアプリケーションで、iconv関数を使用して独自に文字コード変換を行うことはできません。

SIGTERMなどのシグナルハンドラについて

バッチアプリケーションからシグナルに関する処理を行わないでください。
シグナルに関する操作を行った場合、ジョブの動作は保証しません。

標準出力/標準エラー出力への出力について

バッチアプリケーションからprintf関数などを使用して標準出力(stdout)/標準エラー出力(stderr)に大量データを出力しないでください。標準出力/標準エラー出力へ出力できるデータの量は、以下に示す上限があるため、上限を超えて出力した分のデータは、切り捨てられます。

標準出力/標準エラー出力に出力できるデータ量の上限

標準出力/標準エラー出力 あわせて1ジョブあたり2メガバイト

ただし、標準出力/標準エラー出力には、バッチ実行基盤からジョブの実行に関するデータを出力するため、実際にバッチアプリケーションから標準出力/標準エラー出力に出力できるデータ量は、上記の上限以下となります。
また、バッチアプリケーション間で、標準出力/標準エラー出力を利用したデータの引継ぎはできません。

業務用データベースのトランザクション制御について

バッチ実行基盤では、バッチアプリケーションが使用する業務用データベースのトランザクション制御を行いません。バッチアプリケーション内でトランザクション制御を行ってください。

IPC資源について

バッチ実行基盤では、バッチアプリケーションでのIPC資源の利用を管理しないため、プロセスダウン等が発生した場合、IPC資源が回収されません。

入力要求を求めるアプリケーションの実行

バッチアプリケーション内で、標準出力/標準エラー出力にプロンプトを出力して入力要求を求めるような処理はできません。

コード体系について

バッチ受付サービス、バッチ実行サービス、バッチワークユニット、バッチアプリケーション、引継ぎファイルなどで扱うデータのコード体系は、すべて同じコード体系に統一してください。


文字コードの設計については、“Interstage Job Workload Server セットアップガイド”の“文字コードの設計”を参照してください。

英数字項目の入力パラメタについて

C言語アプリケーションの英数字項目の入力パラメタの扱いは以下のとおりです。

コンパイル・リンクについて

オペレーティングテステムがRHEL5(Intel64)の場合、バッチアプリケーションは、64ビットアプリケーションとしてコンパイルしてください。また、バッチアプリケーションでライブラリを使用する場合は、64ビットアプリケーションとしてコンパイルしたライブラリを使用してください。