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には,コマンドを格納しているディレクトリをサーチパスに追加してください。なお,サーチパスは次に示すどれかの方法で追加してください。
-
プロセスサービス定義のprcsvpathオペランドにコマンドのパス名を指定
-
prcpathコマンドでサーチパスを追加
-
ユーザサービス定義に環境変数をputenv PATHと指定
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の下)のコマンド名とも重複しないようにしてください。