[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.3 サブプロセスのコントロール

Octaveは,サブプロセスの開始について,systempopenの ような高水準のコマンドをを備えています。もし何らかの作業を行うめに 別のプログラムを実行してその出力を見たいならば,おそらく,これらの 関数を使用したいと思うでしょう。

Octaveはいくつかの低水準のUNIXライクな関数も提供しています。この関数は, サブプロセスを開始するために使用することもできますが,高水準関数では実行 する方法が見あたらないときにのみ使用するべきです。

Built-in Function: system (string, return_output, type)

文字列stringによって指定されたシェルコマンドを実行する。2番め の引数はオプションである。もしtype"async"ならば, そのプロセスはバックグラウンドで実行され,子プロセスのプロセスIDが 直ちに返る。そうでなければ,そのプロセスは開始し,これが終了するま でOctaveは待機する。引数typeを省略すると,値"sync"を 仮定する。

もし2つの入力引数が与えられ(return_outputの実際の値は関係し ない),そのサブプロセスは同期的に開始されるならば,あるいは systemが1つの入力引数と1つ以上の出力引数で呼び出されるなら ば,このコマンドからの出力は返される。そうでなければ,もしサブプロ セスを同期的に実行しているならば,その出力は標準出力に送られる。 systemで実行したコマンドの出力をページャに送るには,以下の ようなコマンドを使用せよ:

 
disp (system (cmd, 1));

or

 
printf ("%s
", system (cmd, 1));

system関数は,2つの値を返すことになる。1番目は,そのコマン ドが標準出力ストリームに各込んだ任意の出力であり,2番目はコマンド の出力ステータスである。たとえば,

 
[output, status] = system ("echo foo; exit 2");

この式は,変数outputに文字列`foo'をセットし, 変数statusに整数`2'をセットする。

Built-in Function: fid = popen (command, mode)

パイプを作成し,プロセスを開始する。実行すべきコマンドの名前は, commandによって与える。そのプロセスの入出力に対応するファイル IDは,fidに返される。引数modeは,以下のようになる。

"r"

パイプは,そのプロセスの標準出力に結合し,読み込みのためにオープンされる。

"w"

パイプは,そのプロセスの標準入力に結合し,書き出しのためにオープンされる。

例を挙げる。

 
fid = popen ("ls -ltr / | tail -3", "r");
while (isstr (s = fgets (fid)))
  fputs (stdout, s);
endwhile
     -| drwxr-xr-x  33 root  root  3072 Feb 15 13:28 etc
     -| drwxr-xr-x   3 root  root  1024 Feb 15 13:28 lib
     -| drwxrwxrwt  15 root  root  2048 Feb 17 14:53 tmp

Built-in Function: pclose (fid)

popenによってオープンされたファイルIDをクローズする。 この目的には,fcloseを使うこともできる。

Function File: [in, out, pid] = popen2 (command, args)

2方向通信を行うサブプロセスを開始する。プロセスの名前は,command によって与えられ,argsはそのコマンドに対するオプションを含む文字 列の配列である。入力および出力ストリームに関するファイル識別子は, inoutに返る。コマンドの実行が成功すると,pidは サブプロセスのプロセスIDを含む。そうでなければ,pidは-1 である。

以下に例を示す。

 
[in, out, pid] = popen2 ("sort", "-nr");
fputs (in, "these\nare\nsome\nstrings\n");
fclose (in);
while (isstr (s = fgets (out)))
  fputs (stdout, s);
endwhile
fclose (out);
-| are
-| some
-| strings
-| these

Built-in Variable: EXEC_PATH

変数EXEC_PATHは,外部プログラムを実行するときに検索するディレク トリを,コロンで区切って並べたものである。その初期値は,(存在していれ ば)環境変数OCTAVE_EXEC_PATHあるいはPATHからとられる。し かし,その値はコマンドライン引数--exec-path PATH,またはスタート アップスクリプトでEXEC_PATHに値を設定することにより,上書きされ る。EXEC_PATHの値の先頭(末端)にコロンがあれば,ディレクトリ

 
octave-home/libexec/octave/site/exec/arch
octave-home/libexec/octave/version/exec/arch

が,EXEC_PATHの先頭(末尾)に追加される。ここでoctave-home はOctaveのすべてがインストールされたトップレベルディレクトリ(標準設定 は`/usr/local')である。もしEXEC_PATHの値を明示的に 指定しなければ,これらの特殊ディレクトリは,シェルパスの先頭に追加され る。

大部分のケースにおいて,以下の関数は単にその引数をデコードし,対応する UNIXのシステムコールを行います。これらをどのように使用することができるか の完全な例については,関数popen2の定義を見てください。

Built-in Function: [pid, msg] = fork ()

カレントプロセスをのコピーを生成する。

この関数は,以下の値のひとつを返す:

> 0

親プロセスにいる。forkから返った値は,子プロセスのプロセスID である。おそらく,終了すべき子プロセスを待つために準備すべきであろう。

0

子プロセスにいる。別のプロセスを開始するためにexecを呼び出す ことができる。それが失敗すると,exitを呼び出すべきであろう。

< 0

何らかの理由で,forkの呼び出しが失敗した。回避する行動をとら なければならない。システムに依存するエラーメッセージは,msgに 入ることになる。

Built-in Function: [err, msg] = exec (file, args)

現在のプロセスを新しいプロセスで置き換える。最初にforkを呼び出さ ずにexecを呼ぶと,Octaveの現在の処理を終了し,それをfileと いう名前のプログラムで置き換える。たとえば,

 
exec ("ls" "-l")

この式はlsを実行し,シェルのプロンプトに戻る。

成功すると,errは0になり,msgは空文字列となる。そうで ないならば,errはゼロ以外になり,msgにはシステム依存の エラーメッセージが入る。

Built-in Function: [file_ids, err, msg] = pipe ()

パイプを作成し,ベクトルfile_idsを返す。これは,パイプの読み込み と書き出しの末端に対応する。

成功すると,errは0になり,msgは空文字列となる。そうで ないならば,errはゼロ以外になり,msgにはシステム依存の エラーメッセージが入る。

Built-in Function: [fid, msg] = dup2 (old, new)

ファイル記述子を複製する。

成功すると,errは0になり,msgは空文字列となる。そうで ないならば,errはゼロ以外になり,msgにはシステム依存の エラーメッセージが入る。

Built-in Function: [pid, msg] = waitpid (pid, options)

プロセスpidが終了するのを待つ。引数pidは,以下の値をとる ことができる:

-1

任意の子プロセスを待つ。

0

グループIDがOctaveのインタプリタプロセスと等しい任意の子プロセスを 待つ。

> 0

IDがpidである子プロセスの終了を待機する。

引数optionsには,以下の値を設定できる:

0

シグナルを受け取るか子プロセスが終了するまで待機する(引数options を指定しないときは,この動作が標準設定である)。

1

ステータスが直ちに得られないならば,ハングしない。

2

停止した任意の子プロセスのステータスを報告する。また,そのステータスは, それらが停止するまで報告されない。

3

1と2の両方を指定するのと同じ。

もしpidの戻り値が0より大きいならば,その値は存在する子プロセスの プロセスIDである。もしエラーが発生すると,pidは0より小さくなり, msgにはシステム依存のエラーメッセージが入る。

Built-in Function: [err, msg] = fcntl (fid, request, arg)

オープンしたファイルfidのプロパティを変更する。以下の値を requestとして渡すことができる:

F_DUPFD

複製したファイル記述子を返す。

F_GETFD

fidに関するファイル記述子フラグを返す。

F_SETFD

fidに関するファイル記述子フラグをセットする。

F_GETFL

fidに関するファイルステータスフラグをセットする。以下のコードが 返ってくる(システムによっては,いくつかのフラグが定義されないことが ある)。

O_RDONLY

読み込み専用でオープンされた

O_WRONLY

書き出し専用でオープンされた

O_RDWR

読み書き両用でオープンされた

O_APPEND

書き出しを追加

O_CREAT

ファイルが存在していなければファイルを生成する

O_NONBLOCK

Nonblockingモード

O_SYNC

書き込みが完了するまで待機

O_ASYNC

非同期I/O

F_SETFL

fidについてのファイルステータスフラグを,argによって 指定された値にセットする。変更可能なフラグは,O_APPENDO_NONBLOCKである。

成功すると,errは0になり,msgは空文字列となる。そうで ないならば,errはゼロ以外になり,msgにはシステム依存の エラーメッセージが入る。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on July, 20 2006 using texi2html 1.76.