Process ライブラリ


概要 - Abstract

VCSSL Process ライブラリ は、オペレーティングシステムと通信し、プロセスを起動・制御するための標準ライブラリです。起動したプロセスと、標準入出力でやり取りする事も可能です。

Process ライブラリは、VCSSLからオペレーティングシステムのコマンドを実行したり、別のアプリケーションを起動したりといった機能を提供します。また、VCSSL のプログラムと、VCSSL 以外の言語で開発されたプログラムを連携させる(他言語連携)場合においても必要となります。

VCSSL におけるプロセス制御の基本的な流れは、以下の通りです。

まず、newProcess 関数でプロセスを生成します。この時点では、まだ実行は開始されません。この関数は、プロセスに固有のID(プロセスID)を割り振って返します( ここでのプロセスIDは、VCSSL処理系によって割り振られるIDであり、オペレーティングシステムによって割り振られるIDとは一般に一致しません )。

続いて、startProcess 関数でプロセスの実行を開始します。プロセスの実行は、VCSSLプログラムの実行とは非同期で行われます。つまり、プロセスの再生終了を待つことなく、VCSSL の処理も引き続き実行されていきます。もしも、プロセスの終了までVCSSL側の処理を待機させたい場合は、waitForProcess 関数を使用してください。

プロセスの再生が終了すると、onProcessEnd イベントハンドラがコールされます。ここでプロセスの破棄などを行います。

プロセスの標準出力を取得するには、二通りの方法があります。一つは、setProcessOutput 関数を呼び出し、任意のタイミングで能動的に取得する方法です。これは、プロセスの終了後に、標準出力内容を一括して取得したい場合などに便利です。もう一つは、onProcessOutputイベントハンドラを用いて受動的に取得する方法です。こちらは、受け取った標準出力内容に応じて、標準入力にレスポンスを返したいような場合に便利です。ただしこの場合、標準出力内容が(恐らく行単位で)バッファされ、イベントハンドラに渡されるまでにタイムラグが生じる事に注意してください(特に、改行が行われないままプロセスが入力待ちとなるような場合には注意が必要です)。このタイムラグが問題になるようなやり取りを行うには、必要に応じてループなどからflushProcessOutput 関数をコールし、適時バッファをフラッシュするなどしてください。


目次 - Index

int newProcess( string command[ ] )
ネイティブアプリケーションのプロセスを生成し、それに固有の識別番号である「プロセスID」を割り振って返します。この関数によるプロセスの生成後、startProcess をコールするまで実行は開始されないため( VCSSL 3.3以降 )、その間に標準入力内容の設定などを行う事ができます。プロセスの生成は System.exec でも可能ですが、exec はプロセス生成と同時に実行開始も行います。例として、「test.exe」にコマンドライン引数「1」「2」「3」を指定して起動するには、File ライブラリと Process ライブラリを import した上で:string command[] = { getFilePath("test.exe"), "1", "2", "3" }int processID = newProcess(command);などとします。実行を開始するには、続けて:startProcess(processID);とします。終了まで待機するには、続けて:waitForProcess(processID);とします。
int newProcess( string command )
ネイティブアプリケーションのプロセスを生成し、それに固有の識別番号である「プロセスID」を割り振って返します。この関数によるプロセスの生成後、startProcess をコールするまで実行は開始されないため( VCSSL 3.3以降 )、その間に標準入力内容の設定などを行う事ができます。プロセスの生成は System.exec でも可能ですが、exec はプロセス生成と同時に実行開始も行います。
void startProcess( int processID )
ネイティブアプリケーションのプロセスを実行開始します。実行開始後は、VCSSLの実行とは独立に、非同期に処理が行われます。プロセスの実行完了まで、VCSSL側の処理を待機させたい場合は、waitForProcess をコールしてください。
void deleteProcess( int processID )
ネイティブアプリケーションのプロセスに関するリソースを破棄します。プロセスの実行終了後にコールしてください。ただし、プロセスの実行途中でコールしてはいけません。プロセスを実行途中で破棄するには先に destroyProcess で強制終了させてください。
void destroyProcess( int processID )
ネイティブアプリケーションのプロセスを、実行途中で強制終了します。
void setProcessInput( int processID, string command )
プロセスに渡す標準入力内容を設定します。入力内容はバッファされ、プロセスが実際に入力待ちの状態になったタイミングで、プロセスに渡されます。そのためプロセスの終了までに必要な標準入力内容を、改行コード区切りで全てまとめて設定しておく事もできます。例として、順に「1」,「2」,「3」と入力する場合には:setProcessInput(processID, "1" + EOL + "2" + EOL + "3" + EOL);などとします。なお、バッファに頼らず、標準出力内容の取得と合わせて、対話的に(逐次的に)標準入力を行っていく事もできます。その際、環境にもよりますが、入力内容の末尾には改行コードを付けておかないと、受理されない場合があります。
string getProcessOutput( int processID )
コールされた時点までにバッファされている、プロセスの標準出力内容を取得します。環境によっては、バッファ量に上限があったり、バッファ量が蓄積すると効率が低下する事があります。そのため、標準出力内容が多いネイティブアプリケーションについては、clearProcessOutput で適時バッファをクリアしてください。
string getProcessError( int processID )
コールされた時点までにバッファされている、プロセスの標準エラー出力内容を取得します。環境によっては、バッファ量に上限があったり、バッファ量が蓄積すると効率が低下する事があります。そのため、標準エラー出力内容が多いネイティブアプリケーションについては、clearProcessError で適時バッファをクリアしてください。
void clearProcessOutput( int processID )
プロセスの標準出力バッファをクリアします。標準出力内容が多いネイティブアプリケーションについては、バッファ量が蓄積してくると効率が低下するため、適時クリアしてください。
void clearProcessError( int processID )
プロセスの標準エラー出力バッファをクリアします。標準出力内容が多いネイティブアプリケーションについては、バッファ量が蓄積してくると効率が低下するため、適時クリアしてください。
void flushProcessOutput( int processID )
プロセスの標準出力バッファをフラッシュします。フラッシュを行うと、その時点でバッファされている内容が全てonProcessOutput に流されます。
void flushProcessError( int processID )
プロセスの標準エラー出力バッファをフラッシュします。フラッシュを行うと、その時点でバッファされている内容が全てonProcessError に流されます。
int getProcessExitValue( int processID )
プロセスの終了ステータスコードを返します。
void waitForProcess( int processID )
プロセスの実行が終了するまで、VCSSL側の実行を待機します。
void onProcessStart(int processID)
プロセスが生成された際にコールされます。
void onProcessEnd(int processID)
プロセスが終了した際にコールされます。
void onProcessOutput(int processID, string output)
プロセスが標準出力を行った際にコールされます。ただし出力内容はバッファされるため、実際に出力が行われた瞬間にコールされるわけではなく、タイムラグが存在します。バッファがフラッシュされるタイミングは、厳密には処理系依存ですが、恐らく通常は行単位です。その場合、このイベントハンドラにも、出力内容が行単位で渡されます(ただし、処理系のバッファ容量を超過するような長い行では、1行の内容が区切られ、複数回に渡ってコールされる可能性もあります)。なお、改行を待たずに、任意のタイミングでバッファを強制的にフラッシュさせるには、flushProcessOutput 関数を使用してください。
void onProcessOutput(int processID, string output)
プロセスが標準エラー出力を行った際にコールされます。ただし出力内容はバッファされるため、実際に出力が行われた瞬間にコールされるわけではなく、タイムラグが存在します。バッファがフラッシュされるタイミングは、厳密には処理系依存ですが、恐らく通常は行単位です。その場合、このイベントハンドラにも、出力内容が行単位で渡されます(ただし、処理系のバッファ容量を超過するような長い行では、1行の内容が区切られ、複数回に渡ってコールされる可能性もあります)。なお、改行を待たずに、任意のタイミングでバッファを強制的にフラッシュさせるには、flushProcessError 関数を使用してください。

構造体 - Structs

- なし - None -


変数 - Variables

- なし - None -


関数 - Functions

定義
- Signature
int newProcess( string command[ ] )
詳細
- Details
ネイティブアプリケーションのプロセスを生成し、それに固有の識別番号である「プロセスID」を割り振って返します。
この関数によるプロセスの生成後、startProcess をコールするまで実行は開始されないため( VCSSL 3.3以降 )、その間に標準入力内容の設定などを行う事ができます。プロセスの生成は System.exec でも可能ですが、exec はプロセス生成と同時に実行開始も行います。
例として、「test.exe」にコマンドライン引数「1」「2」「3」を指定して起動するには、File ライブラリと Process ライブラリを import した上で:
string command[] = { getFilePath("test.exe"), "1", "2", "3" }
int processID = newProcess(command);
などとします。実行を開始するには、続けて:
startProcess(processID);
とします。終了まで待機するには、続けて:
waitForProcess(processID);
とします。
引数
- Arguments
command[] : オペレーティングシステムに渡すコマンド。一般的な環境では [0] にアプリケーションの絶対パス、[1] 以降に起動時のコマンドライン引数を指定します。なお、絶対パスは File.getFilePath で取得できます。
戻り値
- Return
生成したプロセスに割り振られたプロセスID(識別番号)。
定義
- Signature
int newProcess( string command )
詳細
- Details
ネイティブアプリケーションのプロセスを生成し、それに固有の識別番号である「プロセスID」を割り振って返します。
この関数によるプロセスの生成後、startProcess をコールするまで実行は開始されないため( VCSSL 3.3以降 )、その間に標準入力内容の設定などを行う事ができます。プロセスの生成は System.exec でも可能ですが、exec はプロセス生成と同時に実行開始も行います。
引数
- Arguments
command : オペレーティングシステムに渡すコマンド。コマンド入力端末に入力するように、1行にまとめて指定します。ただし環境によっては使用できない場合があります。
戻り値
- Return
生成したプロセスに割り振られたプロセスID(識別番号)。
定義
- Signature
void startProcess( int processID )
詳細
- Details
ネイティブアプリケーションのプロセスを実行開始します。
実行開始後は、VCSSLの実行とは独立に、非同期に処理が行われます。プロセスの実行完了まで、VCSSL側の処理を待機させたい場合は、waitForProcess をコールしてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void deleteProcess( int processID )
詳細
- Details
ネイティブアプリケーションのプロセスに関するリソースを破棄します。プロセスの実行終了後にコールしてください。
ただし、プロセスの実行途中でコールしてはいけません。プロセスを実行途中で破棄するには先に destroyProcess で強制終了させてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void destroyProcess( int processID )
詳細
- Details
ネイティブアプリケーションのプロセスを、実行途中で強制終了します。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void setProcessInput( int processID, string command )
詳細
- Details
プロセスに渡す標準入力内容を設定します。
入力内容はバッファされ、プロセスが実際に入力待ちの状態になったタイミングで、プロセスに渡されます。そのためプロセスの終了までに必要な標準入力内容を、改行コード区切りで全てまとめて設定しておく事もできます。
例として、順に「1」,「2」,「3」と入力する場合には:
setProcessInput(processID, "1" + EOL + "2" + EOL + "3" + EOL);
などとします。
なお、バッファに頼らず、標準出力内容の取得と合わせて、対話的に(逐次的に)標準入力を行っていく事もできます。その際、環境にもよりますが、入力内容の末尾には改行コードを付けておかないと、受理されない場合があります。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
string getProcessOutput( int processID )
詳細
- Details
コールされた時点までにバッファされている、プロセスの標準出力内容を取得します。
環境によっては、バッファ量に上限があったり、バッファ量が蓄積すると効率が低下する事があります。そのため、標準出力内容が多いネイティブアプリケーションについては、clearProcessOutput で適時バッファをクリアしてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
戻り値
- Return
プロセスのバッファされている標準出力内容。
定義
- Signature
string getProcessError( int processID )
詳細
- Details
コールされた時点までにバッファされている、プロセスの標準エラー出力内容を取得します。
環境によっては、バッファ量に上限があったり、バッファ量が蓄積すると効率が低下する事があります。そのため、標準エラー出力内容が多いネイティブアプリケーションについては、clearProcessError で適時バッファをクリアしてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
戻り値
- Return
プロセスのバッファされている標準エラー出力内容。
定義
- Signature
void clearProcessOutput( int processID )
詳細
- Details
プロセスの標準出力バッファをクリアします。標準出力内容が多いネイティブアプリケーションについては、バッファ量が蓄積してくると効率が低下するため、適時クリアしてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void clearProcessError( int processID )
詳細
- Details
プロセスの標準エラー出力バッファをクリアします。標準出力内容が多いネイティブアプリケーションについては、バッファ量が蓄積してくると効率が低下するため、適時クリアしてください。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void flushProcessOutput( int processID )
詳細
- Details
プロセスの標準出力バッファをフラッシュします。フラッシュを行うと、その時点でバッファされている内容が全てonProcessOutput に流されます。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
void flushProcessError( int processID )
詳細
- Details
プロセスの標準エラー出力バッファをフラッシュします。フラッシュを行うと、その時点でバッファされている内容が全てonProcessError に流されます。
引数
- Arguments
processID : 対象プロセスのプロセスID。
定義
- Signature
int getProcessExitValue( int processID )
詳細
- Details
プロセスの終了ステータスコードを返します。
引数
- Arguments
processID : 対象プロセスのプロセスID。
戻り値
- Return
プロセスの終了ステータスコード。
定義
- Signature
void waitForProcess( int processID )
詳細
- Details
プロセスの実行が終了するまで、VCSSL側の実行を待機します。
引数
- Arguments
processID : 対象プロセスのプロセスID。

イベントハンドラ - Event Handler

定義
- Signature
void onProcessStart(int processID)
詳細
- Details
プロセスが生成された際にコールされます。
引数
- Arguments
processID : イベント発生元のプロセスID
定義
- Signature
void onProcessEnd(int processID)
詳細
- Details
プロセスが終了した際にコールされます。
引数
- Arguments
processID : イベント発生元のプロセスID
定義
- Signature
void onProcessOutput(int processID, string output)
詳細
- Details
プロセスが標準出力を行った際にコールされます。ただし出力内容はバッファされるため、実際に出力が行われた瞬間にコールされるわけではなく、タイムラグが存在します。バッファがフラッシュされるタイミングは、厳密には処理系依存ですが、恐らく通常は行単位です。その場合、このイベントハンドラにも、出力内容が行単位で渡されます(ただし、処理系のバッファ容量を超過するような長い行では、1行の内容が区切られ、複数回に渡ってコールされる可能性もあります)。なお、改行を待たずに、任意のタイミングでバッファを強制的にフラッシュさせるには、flushProcessOutput 関数を使用してください。
引数
- Arguments
processID : イベント発生元のプロセスID
processID : 標準出力内容
定義
- Signature
void onProcessOutput(int processID, string output)
詳細
- Details
プロセスが標準エラー出力を行った際にコールされます。ただし出力内容はバッファされるため、実際に出力が行われた瞬間にコールされるわけではなく、タイムラグが存在します。バッファがフラッシュされるタイミングは、厳密には処理系依存ですが、恐らく通常は行単位です。その場合、このイベントハンドラにも、出力内容が行単位で渡されます(ただし、処理系のバッファ容量を超過するような長い行では、1行の内容が区切られ、複数回に渡ってコールされる可能性もあります)。なお、改行を待たずに、任意のタイミングでバッファを強制的にフラッシュさせるには、flushProcessError 関数を使用してください。
引数
- Arguments
processID : イベント発生元のプロセスID
processID : 標準エラー出力内容


スポンサーリンク



スポンサーリンク

この階層の目次
お知らせ

リニアンプロセッサー nano の先行開発版やソースコードリポジトリを公開
2019年04月16日 - オープンソースで開発中の小型プログラム関数電卓ソフト、「 リニアンプロセッサー nano 」の先行開発版やソースコードリポジトリを公開しました。概要と使用方法、ビルド方法などについて解説します。

各ソフトウェアの最新版を一括でリリース、OpenJDKのJava実行環境(JRE)に対応
2019年03月06日 - RINEARNでは3月6日に、主要なソフトウェアの最新版を一括でリリースしました。今回のアップデートには、以前お知らせした、OpenJDKで生成したJREへの対応が含まれています。その概要等をお知らせします。

次回のVCSSL 3.4.10において、関数1個の挙動に非互換な修正が適用されます
2019年02月12日 - VCSSLの次回の正式リリース版3.4.10において、これまでドキュメントと実際の挙動が異なっていた描画系の関数1個に、非互換な修正が適用されます。その詳細と、使用コードでの対応方法について解説します。

新着
画像を任意サイズに拡大・縮小する簡易ツール(複数ファイル一括処理版)

フォルダ内にある全ての画像ファイルを開き、任意のサイズに拡大・縮小して、別のフォルダに保存する簡易ツールです。
2019年03月29日
画像を任意サイズに拡大・縮小する簡易ツール

画像ファイルを開き、任意のサイズに拡大・縮小して、別名で保存する簡易ツールです。
2019年03月28日
画像の矩形(四角形)領域を切り抜く簡易ツール(複数ファイル一括処理版)

フォルダ内にある全ての画像ファイルを開き、その中の矩形(四角形)領域を切り抜いて、別のフォルダに保存する簡易ツールです。
2019年03月15日
画像の矩形(四角形)領域を切り抜く簡易ツール

画像ファイルを開き、その中の矩形(四角形)領域を切り抜いて保存する簡易ツールです。
2019年03月14日
入力された数式を積分して値とグラフを表示するツール

画面上で数式を入力すると、それを数値的に積分し、値とグラフを表示してくれるGUIツールです。
2019年01月20日
開発元Twitterアカウント