主デバイス、現在のデバイス、NULL デバイス
プロセスによるデバイスの所有
シーケンシャル・ファイルを除き、1 つのプロセスが一度に所有できるデバイスは 1 つだけです。
つまり、プロセスがデバイスに OPEN コマンドを正常に発行した後、他のプロセスは、最初のプロセスが解放されるまで、そのデバイスを開くことはできません。以下の方法で、プロセスはデバイスを解放します。
-
CLOSE コマンドを明示的に発行
-
プロセスの停止
主デバイスを持つ各プロセス
各 InterSystems IRIS プロセスは、主入力デバイスと主出力デバイスを 1 つずつ持ちます。既定では、これらは同じデバイスです。ターミナルからログインし InterSystems IRIS を起動すると、そのターミナルが主デバイスになります。InterSystems IRIS は、暗黙の OPEN コマンドと USE コマンドをターミナルに発行するので、そのターミナルに直ちに READ コマンドと WRITE コマンドを発行できます。InterSystems IRIS の主デバイスとは、オペレーティング・システムによって主入力デバイスとして割り当てられたデバイスです。$PRINCIPAL 特殊変数は、主デバイスのデバイス ID を含みます。
InterSystems IRIS による現在のデバイスへの入出力コマンド
InterSystems IRIS は、READ、WRITE、PRINT、および ZLOAD コマンドなどの入出力処理を現在のデバイスに命令します。$IO 特殊変数は、現在のデバイスのデバイス ID を含みます。ターミナルで InterSystems IRIS にログインする際、$IO は、ターミナルのデバイス名を最初に含みます。つまり、主デバイスと現在のデバイスは、ログイン直後は同じになります。USE コマンドの実行後、現在のデバイス ($IO に保持されています) は通常、最後に実行した USE コマンドで指定したデバイスになっています。
プログラマ・モードで、主デバイス以外のデバイスに対して OPEN と USE を発行することはできますが、InterSystems IRIS は > プロンプトに戻るたびに、暗黙に USE 0 を発行します。0 以外のデバイスの使用を続けるためには、> プロンプトで入力する行ごとに USE コマンドを発行する必要があります。
主デバイスを現在のデバイスに設定
以下のいずれかの場合に、自動的に主デバイスが現在のデバイスに設定されます。
-
初めてサインオンしたとき。
-
USE 0 または USE $principal コマンドを発行したとき。
-
%Library.DeviceOpens in a new tab クラスの ChangePrincipal()Opens in a new tab メソッドの呼び出しを発行したとき。
-
エラー・トラップが設定されていない状態でエラーが発生したとき。
-
現在のデバイスを閉じたとき。
-
プログラマ・モードに戻ったとき。
-
HALT コマンドを発行して InterSystems IRIS を終了したとき。
主デバイスの明示的な使用
USE 0 または USE $principal は、プロセスの主デバイスに OPEN コマンドを暗黙的に発行します。他のプロセスがそのデバイスを所有している場合、このプロセスは OPEN コマンドが発生した場合と同じように、暗黙の OPEN で停止します。
(以前の OPEN コマンドによって) プロセスが所有しない他のデバイスに USE コマンドを発行すると、<NOTOPEN> エラーが生成されます。
timeout を設定していない OPEN コマンドは、プロセスがデバイスを取得した場合にのみ、プロセスに制御を返します。キーボードから Ctrl-C などの割り込みコマンドを入力することで、OPEN コマンドの実行に割り込むことができます。保護問題や無効なデバイス名が原因で OPEN コマンドが失敗すると、停止した状態が続きます。OPEN コマンドで timeout を指定すると、OPEN は、timeout の期限が切れたときにプロセスに制御を戻します。
主デバイスを操作するためのオプション
主デバイスの性質に応じて、追加のデバイス固有引数を指定できます。引数は、パイプ (プロセス間通信)、ファイル、ターミナル入出力で異なります。例えば、TLS 接続で主デバイスを開くことができます。
USE $principal:(::/TLS=ConfigName)
ConfigName は、同じインスタンスで定義された TLS 構成の名前です。
NULL デバイス
画面に表示しない無関係の出力がアプリケーションで生成された場合、NULL デバイスにその出力を転送できます。適切な引数を持つ InterSystems IRIS OPEN コマンドを発行して、NULL デバイスを指定します (以下のテーブルを参照してください)。InterSystems IRIS は、そのデバイスをダミー・デバイスとして扱います。
プラットフォーム | NULL デバイス引数 |
---|---|
UNIX® | /dev/null/ |
Windows | //./nul |
この後の READ コマンドは、即座に空の文字列を返します。また、WRITE コマンドの場合は、直ちに成功を返します。いずれも、実データは、読み取りまたは書き込みされていません。NULL デバイスは、UNIX® のシステム呼び出し open、write、read を無視します。
InterSystems IRIS の外部から NULL デバイスを開く場合、(例えば InterSystems IRIS の出力を UNIX® シェルから /dev/null に転送する場合)、他のデバイスに行われるのと同じように、UNIX® システム・コールが発生します。
あるプロセスが JOB コマンドで別のプロセスを開始すると、ジョブ起動プロセスの既定の主入出力デバイスは、NULL デバイスになります。