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

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

●outsiz

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

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

●errsiz

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

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

●flags

標準出力または標準エラー出力メッセージのデータを,完全に取得できなかった場合の,dc_adm_call_command関数の動作を設定します。

DCADM_DELAY…実行したコマンドの処理を中断して,処理をやめます。
DCNOFLAGS…取得できた分のデータを引数に返して,エラーリターンします。

OpenTP1から値が返される引数

●stat

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

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

●outmsg

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

●outsiz

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

●errmsg

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

●errsiz

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

リターン値

リターン値リターン値(数値)意味
DC_OK0シェルの終了コードは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の下)のコマンド名とも重複しないようにしてください。