Hitachi

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


dc_adm_call_command

〈このページの構成〉

名称

運用コマンドの実行

形式

ANSI C ,C++の形式

#include <dcadm.h>
int  dc_adm_call_command(char *com,int *stat,char *outmsg,
                         DCULONG *outsiz,char *errmsg,
                         DCULONG *errsiz,DCLONG flags)

K&R版 C の形式

#include <dcadm.h>
int  dc_adm_call_command(com,stat,outmsg,outsiz,errmsg,errsiz,flags)
char      *com;
int       *stat;
char      *outmsg;
DCULONG   *outsiz;
char      *errmsg;
DCULONG   *errsiz;
DCLONG    flags;

機能

オンライン中にcomをコマンド入力したときと同様に,UAPからcomをsh(1)に渡します。この時のプロセスは,シェルが処理を完了するまで待ち,シェルのexitのステータスを戻します。コマンドの処理が終了すると,標準出力情報と標準エラー出力情報が返ります。標準出力または標準エラー出力メッセージのデータを,完全に取得できなかった場合,取得できた分のデータを引数に返して,エラーリターンします。

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

UAPで値を設定する引数

●com

実行するコマンドの文字列を設定します。文字列の最後にはヌル文字を設定してください。comに指定した文字列は,そのまま,OSのsh(1)に渡します。指定できる文字列長の詳細については,各OSのマニュアル,およびシェルのマニュアルを参照してください。なお,ご使用のOSがWindowsの場合は,指定できるcomの文字列長は,500バイトまでになります。

●outsiz

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

処理終了後は,コマンドの実行結果として標準出力に出力した実際の長さが返されます。

●errsiz

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

処理終了後は,コマンドの実行結果として標準エラー出力に出力した実際の長さが返されます。

●flags

実行するコマンド内で,標準出力または標準エラー出力メッセージを出力する際の出力動作を設定します。

DCADM_DELAY…実行するコマンドから出力する標準出力または標準エラー出力メッセージのデータを同期(ブロッキングモード)で出力します。出力メッセージが出力できない場合は,実行コマンドが終了できないで,dc_adm_call_command関数がリターンしなくなります。

DCNOFLAGS…実行するコマンドから出力する標準出力または標準エラー出力メッセージのデータを非同期(ノンブロッキングモード)で出力します。出力メッセージが出力できた分だけ出力し,実行コマンドは処理を続行できます。dc_adm_call_command関数は,取得できた分のデータを引数に返します。

OpenTP1から値が返される引数

●stat

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

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

●outmsg

コマンドの実行結果として,標準出力に出力した文字列が,最大(outsiz-1)バイト返されます。(outsiz-1)バイトを超える文字は切り捨てられます。また,パイプの容量を超えた分も切り捨てられます。(outsiz-1)バイトを超えなかった場合は,その文字列の長さだけ返されます。格納される文字列の最後にはヌル文字が付けられます。

●outsiz

コマンドの実行結果として,標準出力に出力した文字列の長さが返されます。

●errmsg

コマンドの実行結果として,標準エラー出力に出力した文字列が最大(errsiz-1)バイト返されます。(errsiz-1)バイトを超える文字は切り捨てられます。また,パイプの容量を超えた分も切り捨てられます。(errsiz-1)バイトを超えなかった場合は,その文字列の長さだけ返されます。格納される文字列の最後にはヌル文字が付けられます。

●errsiz

コマンドの実行結果として,標準エラー出力に出力した文字列の長さが返されます。

リターン値

リターン値

リターン値(数値)

意味

DC_OK

0

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

DCADMER_PARAM

-1852

引数に設定した値が間違っています。

DCADMER_STATNOTZERO

-1855

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

DCADMER_MEMORY_OUT

-1856

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

DCADMER_MEMORY_ERR

-1857

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

DCADMER_MEMORY_OUTERR

-1858

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

DCADMER_SYSTEMCALL

-1859

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

注意事項

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