Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


CBLDCADM('COMMAND ')

〈このページの構成〉

名称

運用コマンドの実行

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCADM' USING 一意名1 一意名2 一意名3 一意名4

DATA DIVISIONの指定

01 一意名1.
   02 データ名A  PIC X(8) VALUE 'COMMAND '.
   02 データ名B  PIC X(5).
   02 FILLER    PIC X(3).
   02 データ名Z  PIC S9(9) COMP VALUE ZERO.
   02 データ名C  PIC S9(9) COMP.
01 一意名2.
   02 データ名E  PIC 9(9) COMP.
   02 データ名G  PIC X(n).
01 一意名3.
   02 データ名H  PIC 9(9) COMP.
   02 データ名J  PIC X(n).
01 一意名4.
   02 データ名K  PIC 9(9) COMP.
   02 データ名M  PIC X(n).

機能

オンライン中にコマンドを入力したときと同様に,UAPからデータ名Gをsh(1)に渡します。この時のプロセスは,シェルが処理を完了するまで待ち,シェルのexitのステータスを戻します。コマンドの処理が終了すると,領域に標準出力情報と標準エラー出力情報が返ります。

コマンドを実行するUAPを使うOpenTP1には,コマンドを格納しているディレクトリをサーチパスに追加してください。なお,サーチパスは次に示すどれかの方法で追加してください。

UAPで値を設定するデータ領域

●データ名A

コマンドの実行を示す要求コードを「VALUE 'COMMAND△'」と設定します。

●データ名Z

0を設定します。

●データ名E

データ名Gに設定したコマンドの長さを設定します。

●データ名G

コマンドの文字列を設定します。

●データ名H

コマンドの実行結果として標準出力に出力する内容(データ名Jに返される値)の大きさをバイト数で設定します。事前にデータ名Jで指すアドレスから,データ名Hに設定するバイト数分の領域を確保しておいてください。データ名Hに指定するバイト数は,UAPで実行するコマンドに応じて決めてください。

処理終了後はデータ名Jに格納された文字列の長さがOpenTP1から返されます。データ名H自身の長さは含みません。

●データ名K

コマンドの実行結果として標準エラー出力に出力する内容(データ名Mに返される値)の大きさをバイト数で設定します。事前にデータ名Mで指すアドレスから,データ名Kに設定するバイト数分の領域を確保しておいてください。データ名Kに指定するバイト数は,UAPで実行するコマンドに応じて決めてください。

処理終了後はデータ名Mに格納した文字列の長さがOpenTP1から返されます。データ名K自身の長さは含みません。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

●データ名C

コマンドが,正常終了したか異常終了したか(シェルの終了コード)*が返されます。

*:waitpid(2)で指定したフォーマットで,sh(1)の終了ステータス

●データ名H

処理終了後に,データ名Jに格納された文字列の長さが返されます。データ名H自身の長さは含みません。

●データ名J

コマンドが標準出力に出力した文字を格納する領域です。格納できる最大文字長はデータ名Hで設定した値までです。データ名Hに設定した値を超える長さの文字は切り捨てられます。また,パイプの容量を超えた分も切り捨てられます。

●データ名K

処理終了後に,データ名Mに格納した文字列の長さが返されます。データ名K自身の長さは含みません。

●データ名M

コマンドが標準エラー出力に出力した文字を格納する領域です。格納できる最大文字長はデータ名Kに設定した値までです。データ名Kに設定した値を超える長さの文字は切り捨てられます。また,パイプの容量を超えた分も切り捨てられます。

ステータスコード

ステータスコード

意味

00000

シェルの終了コードは0(コマンドの実行が正常終了)です。標準出力および標準エラー出力の領域に文字列を格納しました。

01801

シェルの終了コードは0以外(コマンドの実行が異常終了)です。標準出力および標準エラー出力のデータを領域に格納しました。

01802

データ名に設定した値が間違っています。要求コード(データ名A)が間違っている場合も含みます。

01803

標準出力のデータが,領域に入り切りませんでした。

01804

標準エラー出力のデータが,領域に入り切りませんでした。

01805

標準出力のデータと標準エラー出力のデータの両方が,領域に入り切りませんでした。

01806

システムコール(close,pipe,dup,またはread)に失敗しました。

01807

CBLDCRPC('OPEN ')を呼び出していません。

01808

メモリが不足しました。

注意事項

サーチパスに指定したディレクトリ間で,コマンド名が重複しないように注意してください。コマンド名が重複している場合,正しいコマンドが起動されないで別のコマンドが起動されます。また,コマンド名は,OpenTP1が提供するコマンド群($DCDIR/binの下)のコマンド名とも重複しないようにしてください。