入出力の概要
ここでは、InterSystems IRIS® データ・プラットフォーム・アプリケーションと InterSystems IRIS プロンプトにおける入出力デバイスの操作方法の概要を説明します。
概要
InterSystems IRIS® データ・プラットフォームは、さまざまな種類のデバイス (論理と物理の両方) をサポートしています。サポートされる論理デバイスは、以下のとおりです。
-
InterSystems IRIS プロセス間で通信を行うためのインタジョブ・コミュニケーション (IJC) デバイス
サポートされる物理デバイスは、以下のとおりです。
入出力コマンドの概要
入出力コマンドにより、デバイスの所有、使用、読み取り、書き込み、クローズができます。入出力処理をデバイスに指示するには、以下のコマンドを最初に発行します。
-
デバイスが主デバイスではない場合、OPEN コマンドを発行し、所有権を構築します。
-
USE コマンドを発行して、デバイスを現在のデバイスにします。
-
次に、READ と WRITE コマンドを発行して、そのデバイスからの読み取り、デバイスへの書き込みを行います。
-
CLOSE コマンドを発行してデバイスの所有権を解放し、他のプロセスがそのデバイスを使用できるようにします。
以下の一般構文は、ObjectScript で入出力コマンド・キーワードをサポートする入出力コマンドを適用しています。
OPEN device:paramlist:timeout:"mnespace"
USE device:paramlist:"mnespace"
CLOSE device:paramlist
paramlist は、単一のパラメータ、または括弧で囲まれコロンで区切られたパラメータのリストのいずれかです。
parameter (parameter:parameter[:...])
parameter は、位置パラメータあるいはキーワード・パラメータのいずれかです。キーワード・パラメータは以下の構文になります。
/keyword[=value]
最初にスラッシュがあるものがキーワード・パラメータで、そのスラッシュの有無により位置パラメータ値と区別します。位置パラメータ値は、コロンで区切られたリストからその位置を取得します。キーワード・パラメータ値は、指定したキーワードから取得します。
位置パラメータとキーワード・パラメータのどちらも、同じ paramlist で指定できます。例えば、以下の例は位置パラメータとキーワード・パラメータを混在して使用し、JIS の入出力変換による書き込みモードあるいはシーケンシャル・モードで test.dat というファイルを新規に開きます。
OPEN "test.dat":("NWS":/IOTABLE="JIS")
OPEN コマンド
OPEN コマンドは、指定されたデバイスの所有権を構築し、入出力チャネルを開きます。この所有権は、CLOSE コマンドを発行するか、プロセスが終了するか、物理的処理がデバイスを閉じるまで保持されます。物理入出力デバイスや、TCP 接続などのプロセス間通信では、この所有権により、他のプロセスすべてがデバイスにアクセスできないようにしています。シーケンシャル・ファイルなどの論理入出力デバイスでは、この所有権が設定されていても、共有アクセスの形式で他のプロセスからデバイスにアクセスできることがあります。同じシーケンシャル・ファイルを複数のプロセスで開けるかどうかは、プラットフォームに依存しています。LOCK コマンドを使用してシーケンシャル・ファイルへのアクセスを制限してください。
構文
OPEN device{:{(parameters)}{:{timeout}{:"mnespace"}}}
デバイス名、ID 番号、またはニーモニックです。device の最大長は 256 文字です。
オプション — デバイスに必要な追加情報を指定する 1 つまたは複数のパラメータです。このパラメータのリストは括弧で囲まれ、リスト内のパラメータはコロンで区切られます。使用可能なパラメータは、パイプ (プロセス間通信)、ファイル、ターミナル入出力で異なります。
オプション — 要求の成功を待機する時間を指定します。先頭のコロンは必須です。timeout は、必ず整数値または式で指定します。timeout がゼロ (0) の場合、OPEN はファイルを 1 回だけ開こうとします。実行が失敗した場合、OPEN も即座に失敗します。試行に成功した場合は、ファイルが無事に開きます。timeout を設定していない場合、InterSystems IRIS は OPEN が成功するまで、またはプロセスが手動で終了されるまで、デバイスを開く試行を続行します。
詳細は、"ObjectScript リファレンス" の "OPEN" コマンドを参照してください。
Windows システムでの OPEN の使用例
以下のコマンドは、Windows システムからターミナル・サーバに、外部の Telnet を接続します。
OPEN "|TNT|node:port"
node はノード名、port はサーバ上の IP ポートです。
以下のコマンドは、既存の Windows ファイルとの間に入出力チャネルを開きます。
OPEN "c:\abc\test.out":"WS"
UNIX® システムでの OPEN の使用例
以下のコマンドは、UNIX® ターミナル・デバイス /dev/tty06 への入出力チャネルを開きます。
OPEN "/dev/tty06/"
USE コマンド
このコマンドは、特定のデバイスを現在のデバイスにし、そのデバイスに特殊変数 $IO を設定します。主デバイス以外のデバイスに USE を使用するには、最初に OPEN コマンドを発行する必要があります。このコマンドを発行しない場合、<NOTOPEN> エラーが返されます。引数は、OPEN コマンドと同じ意味を持ちます。
構文
USE device:(args):"mnespace"
デバイス名、ID 番号、またはエイリアスです。device の最大長は 256 文字です。
オプション — 一部のデバイスに必要な追加情報です。使用可能なパラメータは、パイプ (プロセス間通信)、ファイル、ターミナル入出力で異なります。
オプション — このデバイスへ入出力を指示するときに、WRITE /mnemonic コマンドで使用できる制御ニーモニックの定義を含む InterSystems IRIS ルーチン名です。
詳細は、"ObjectScript リファレンス" の "USE" コマンドを参照してください。
Windows での USE の使用例
次の Windows の例では、TCP 経由でリモート・ホスト larry 上の時刻サーバに接続するために使用するコマンドを示しています。このコマンドではサービス名 daytime を使用しますが、これはローカル・システムでポート番号に解決されます。USE コマンドは、OPEN C モードを PSTE モードに置き換え、すべてのユーザ・ターミネータをオフにします。
OPEN "|TCP|4":("larry":"daytime":"C")
USE "|TCP|4":(::"PSTE")
UNIX® での USE の使用例
以下の UNIX® コマンドの例では、/dev/tty06 デバイスとの間に入出力チャネルを開き、X364 ターミナル・ニーモニックで WRITE /mnemonic を使用するオプションを指定して、このデバイスを現在のデバイスに設定します。
OPEN "/dev/tty06"
USE "/dev/tty06"::"^%x364"
READ コマンド
このコマンドは、現在のデバイスからデータを読み取ります。デバイスによっては、アスタリスクで始まる引数に ASCII の数値情報を返すものがあります。その他のデバイスでは、この引数は制御関数を示します。
構文
READ variable:timeout
詳細は、"ObjectScript リファレンス" の "READ" コマンドを参照してください。
WRITE コマンド
このコマンドは、現在のデバイスにデータを書き込みます。デバイスによっては、最初にアスタリスクが付いた引数を指定すると、ASCII の数値を使用して ASCII 文字を書き込むことができるものがあります。その他のデバイスには、この引数は制御関数を示します。デバイスによっては、先頭に # 文字が付いた引数で、指定された文字を書き込む回数を示すものもあります。
構文
WRITE variable
詳細は、"ObjectScript リファレンス" の "WRITE" コマンドを参照してください。
WRITE /mnemonic
WRITE /mnemonic 構文により、ニーモニック空間の InterSystems IRIS コードに定義されたニーモニック・デバイスを制御できます。ニーモニック空間は、InterSystems IRIS ルーチンであり、OPEN コマンドまたは USE コマンドでアクティブにするか、管理ポータルを使用してデバイスの既定として構成する必要があります。ニーモニック空間を定義して、アクティブにする方法については、"既定のニーモニック空間の定義" を参照してください。
以下のコマンドを発行し、事前定義された ^%X364 ニーモニック空間を使用して、ターミナル画面の 2 行目の 1 列目にカーソルを移動します。
WRITE /CUP(1,2)
CLOSE コマンド
CLOSE コマンドは、指定されたデバイスの所有権を解放します。CLOSE は、OPEN コマンドと逆の動作を実行します。
構文
CLOSE device[:params]
デバイス名、ID 番号、またはニーモニックです。
パラメータ K は、オペレーティング・システム・レベルではデバイスを閉じず、InterSystems IRIS レベルで閉じます。
K パラメータは、Windows システムでは何も動作しません。ファイルは、オペレーティング・システム・レベルで閉じます。
CLOSE コマンドを主デバイスに発行すると、主デバイスは、ユーザがログオフするまでプロセスに割り当てられたままになります。
他のいくつかの条件は、CLOSE の振る舞いに影響します。
-
何らかの原因によりデバイスへの出力が停止した場合、InterSystems IRIS は、そのデバイスへの出力を完了できないことがあります。この場合、デバイスを閉じたり、停止したりできないことがあります。例えば、ターミナルがオペレーティング・システムに Ctrl-S を送信し、ターミナルへの出力を停止するよう命令した場合、Ctrl-Q を押して、ターミナルへの出力を再開する必要があります。
-
現在のデバイスを閉じると、CLOSE は、システム変数 $IO の値を主デバイスの値に変更します。CLOSE コマンドは、デバイスへのすべての出力が完了した後にのみ、現在のデバイスの所有権を解放します。
-
プロセスが停止すると、InterSystems IRIS で作業中にそのプロセスが開いたすべてのデバイスが自動的に閉じます。
何らかの原因によりデバイスへの出力が停止した場合、InterSystems IRIS がそのデバイスへの出力を完了できないことがあります。この場合、デバイスを閉じたり、停止したりできないことがあります。
詳細は、"ObjectScript リファレンス" の "CLOSE" コマンドを参照してください。