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