|
≫ |
|
|
|
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)
指定された文字列を,コマンド・プロセッサで実行させるためにホスト環境に渡します。この関数は非リエントラントです。
形式
#include <stdlib.h>
int system (const char *string);
引数
string実行する文字列へのポインタ。
string が NULL である場合には,ゼロ以外の値が返されます。 string は DCL コマンドであり,イメージの名前ではありません。イメージを実行するには,いずれかの
execルーチンを使用してください。
説明
system関数はサブプロセスをスポーンし,そのサブプロセスの中で, string で指定されたコマンドを実行します。
system関数は,サブプロセスが完了するのを待ってから,関数の戻り値としてサブプロセス・ステータスを返します。
サブプロセスは,
system呼び出しの中で,
vforkの呼び出しによってスポーンされます。このため,
systemの呼び出しは,
vforkの呼び出しの後,それに対応する
exec関数の呼び出しの前に行うべきではありません。
OpenVMS Version 7.0 およびそれ以降のシステムでは,
<stdlib.h>をインクルードし, _POSIX_EXIT 機能テスト・マクロを設定してコンパイルを行うと,
system関数が返すステータスは,子を待つために
waitpidを呼び出したときと同じようになります。このため,WIFEXITED および WEXITSTATUS マクロ (
wait* ルーチンの説明を参照) を使用して, 0〜255 の範囲の終了ステータスを取得するようにしてください。
_POSIX_EXIT 機能テスト・マクロの設定は, /DEFINE_POSIX_EXIT を使用するか,ファイルの先頭で,他のファイルをインクルードする前に #define _POSIX_EXIT を指定することによって行います。
戻り値
ゼロ以外の値
|
string が NULL だった場合には,
system
関数がサポートされていることを示す値 1 が返されます。
string が NULL でなければ,値はサブプロセスの OpenVMS リターン・ステータスです。
|
例
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> /* write, close */
#include <fcntl.h> /* Creat */
main()
{
int status,
fd;
/* Creat a file we are sure is there */
fd = creat("system.test", 0);
write(fd, "this is an example of using system", 34);
close(fd);
if (system(NULL)) {
status = system("DIR/NOHEAD/NOTRAIL/SIZE SYSTEM.TEST");
printf("system status = %d\n", status);
}
else
printf("system() not supported.\n");
}
|
この例のプログラムを実行すると,次の結果が出力されます。
DISK3$:[JONES.CRTL.2059.SRC]SYSTEM.TEST;1
1
system status = 1
|
|