Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

OPEN

入出力処理のためにデバイスまたはファイルの所有権を取得します。

Synopsis

OPEN:pc device:(parameters):timeout:"mnespace",... 
O:pc device:(parameters):timeout:"mnespace",...

引数

pc オプション — 後置条件式
device デバイス ID またはデバイス・エイリアスで指定して開くデバイスです。デバイス ID は整数 (デバイス番号)、デバイス名、またはシーケンシャル・ファイルのパス名のいずれかです。文字列の場合は引用符で囲まなければなりません。device の最大長は 256 文字です。
parameters オプション — デバイスの特性を設定するのに使用されるパラメータ・リスト。パラメータ・リストは括弧で囲まれ、リスト内のパラメータはコロンで区切られます。パラメータは (パラメータ・リストの固定順で指定された) 位置、またはキーワード (順不同) のいずれかです。位置パラメータとキーワード・パラメータは、混在させることもできます。個別のパラメータとそれぞれの位置とキーワードは、デバイスに依存しています。
timeout オプション — 整数として指定される、要求が成功するのを待機する秒数。秒の小数部は整数部分に切り捨てられます。省略した場合、Caché では無限に待機となります。
mnespace オプション — 引用符付き文字列として指定された、このデバイスで使用する制御ニーモニックを含むニーモニック空間名です。

説明

OPEN コマンドを使用して、入出力処理用に指定されたデバイスの所有者を取得することができます。OPEN は、CLOSE コマンドで所有が解放されるまで、デバイスの所有を保持します。

OPEN コマンドは、各デバイスの指定を区切るためにコンマを使用して、複数のデバイスを開くために使用します。デバイスの指定で、その引数はコロン (:) を使用して区切られています。引数が省略されている場合、位置を示すコロンを指定する必要があります。しかし、末尾のコロンは必要ありません。

OPEN コマンドは、ターミナル・デバイス、磁気テープ・デバイス、スプール・デバイス、TCP バインディング、プロセス間パイプ、名前付きパイプ、ジョブ内通信などのデバイスを開くために使用します。

OPEN コマンドは、シーケンシャル・ファイルを開くためにも使用します。device 引数は、引用符付きの文字列としてファイル・パス名を指定します。parameters 引数は、シーケンシャル・ファイルを管理するパラメータを指定します。このパラメータには、指定されたファイルが存在しない場合は新規のファイルを生成するオプションを含めることもできます。timeout 引数はオプションですが、シーケンシャル・ファイルを開くときには指定することをお勧めます。

シーケンシャル・ファイルを開くオプションの既定は、%SYSTEM.ProcessOpens in a new tab クラスの OpenMode()Opens in a new tab メソッドや FileMode()Opens in a new tab メソッドを使用して現在のプロセスに対して設定され、Config.MiscellaneousOpens in a new tab クラスの OpenModeOpens in a new tab プロパティや FileModeOpens in a new tab プロパティを使用してシステム全体にわたって設定されます。シーケンシャル・ファイルを開く操作の詳細は、"Caché 入出力デバイス・ガイド" の "シーケンシャル・ファイル入出力" を参照してください。

OPEN コマンドは、Caché データベース・ファイルのアクセスには使用されません

Windows 上で、ObjectScript は各プロセスに対し、データベース・ファイル数と OPEN で開くファイル数の間で、開くファイル数を割り当てます。OPEN で開くファイルが多すぎて OPEN コマンドへの割り当てができない場合、<TOOMANYFILES> エラーを生じます。Caché のプロセスごとに開くことができるファイルの最大数は 1,024 です。プロセスごとに開くことができるファイルの実際の最大数は、プラットフォーム固有の設定です。例えば、Windows の既定では、プロセスごとに開くことができるファイルの最大数は 998 です。詳細は、オペレーティング・システムのマニュアルを参照してください。

引数

pc

オプションの後置条件式です。Caché は、後置条件式が True (0 以外の数値に評価される) の場合に OPEN コマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合は、OPEN コマンドを実行しません。OPEN コマンドで複数のデバイスまたはファイルを開く場合でも、許可される後置条件式は 1 つのみです。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

device

開くデバイス。以下のいずれかを使用して、デバイスを指定することができます。

  • 正の整数として指定される、物理的デバイス番号。例えば、2 は常にスプーラ・デバイスです。これは、磁気テープ・デバイスを指定する唯一の方法です (47 ~ 62 の番号)。この番号は Caché 内部のもので、プラットフォーム・オペレーティング・システムによって割り当てられたデバイス番号とは無関係です。

  • 引用符付きの文字列として指定された、デバイス ID です。例えば "|TRM|:|4294318809" です。現在のデバイスに対するデバイス ID は、$IO 特殊変数に含まれています。

  • 正の整数として指定される、デバイス・エイリアスです。デバイス・エイリアスは、物理デバイス番号を参照します。

  • 引用符付き文字列として指定された、ファイル・パス名です。これは、シーケンシャル・ファイルを開くために使用します。パス名はキャノニック形式 (c:\myfiles\testfile)、または現在のディレクトリ (\myfiles\testfile) に関連しています。

device の最大長は、Windows および UNIX® では 256 文字です。詳細は、"デバイスの指定" を参照してください。

parameters

開くデバイスの動作特性を設定するために使用する、パラメータのリスト。複数のパラメータが含まれる場合、括弧で囲まなければなりません (プログラム記述時には、パラメータが 1 つでも必ず括弧で囲むことをお勧めします)。コロンは、左括弧の前に配置します。括弧内では、コロンを使用して複数のパラメータを区切ります。

デバイス用のパラメータは、位置パラメータ、またはキーワード・パラメータのいずれかを使用して指定されます。また、位置パラメータとキーワード・パラメータを同じパラメータ・リスト内で混在させて使用することもできます。

多くの場合、矛盾したパラメータ、複製パラメータ、または無効なパラメータ値を指定するとエラーが返されます。可能な場合は常に、Caché は不適切なパラメータ値を無視し、既定値を使用します。

パラメータのリストを指定しない場合は、デバイスの既定パラメータが使用されます。デバイスの既定パラメータは構成可能です。管理ポータルで、システム, 構成, デバイス設定, デバイス を選択し、現在のデバイスのリストを表示します。対象のデバイスに対して [編集] をクリックし、[オープン・パラメータ :] オプションを表示します。この値を、OPEN コマンド・パラメータと同じ方法で指定します (括弧も含む)。例えば ("AVL":0:2048) です。

利用できるパラメータは、開くデバイスの種類によって異なります。デバイス・パラメータに関する詳細は、"Caché 入出力デバイス・ガイド" の "入出力デバイスとコマンド" を参照してください。

位置パラメータ

位置パラメータは、パラメータ・リスト内で固定の順序で指定されなければなりません。位置パラメータは省略することもできますが (省略の場合は既定値を使用)、省略された位置パラメータの位置を示すためのコロンは保持する必要があります。末尾のコロンは必須です。余分なコロンは無視されます。個別のパラメータとそれぞれの位置は、デバイスに依存しています。位置パラメータには、値と文字コード文字列の 2 種類があります。

値は整数 (例えばレコード・サイズ)、文字列 (例えばホスト名)、または値に評価される変数や式のいずれかです。

文字コード文字列は、開くデバイスの特性を指定するために個別の文字を使用します。大半のデバイスで、この文字コード文字列は位置パラメータの 1 つとなります。ユーザは文字列内の任意の文字数を順不同で指定することができます。文字コードは、大文字と小文字を区別しません。文字コード文字列は引用符で囲まれます。文字コード文字列でスペースや句読点を使用することはできません (\ 記号で区切られた名前が続く K と Y (例 : K\name\) は例外です)。位置パラメータを使用する例は、シーケンシャル・ファイルを開くときに "ANDFW" (既存のファイルへの追加 (A)、ファイルの新規作成 (N)、ファイルの削除 (D)、固定長レコード (F)、書き込みアクセス (W)) という文字コード文字列を指定する場合などです。文字コード文字列パラメータの位置と、それぞれの文字の意味は、デバイスに依存しています。

キーワード・パラメータ

キーワード・パラメータは、パラメータ・リスト内の任意の順序で指定することができます。パラメータ・リストはキーワード・パラメータだけで構成することも、位置パラメータとキーワード・パラメータを混在させて構成することもできます。(一般的には、位置パラメータが (適切な順序で) 最初に指定され、その次にキーワード・パラメータが指定されます)。すべてのパラメータ (位置、およびキーワード) は、コロン (:) で区切られなければなりません。キーワード・パラメータのパラメータ・リストの標準的な構文は、以下のとおりです。

OPEN device:(/KEYWORD1=value1:/KEYWORD2=value2:.../KEYWORDn=valuen):timeout

個別のパラメータとそれぞれの位置は、デバイスに依存しています。標準規約として、位置パラメータやキーワード・パラメータのいずれかを使用して、同じパラメータと値を指定することができます。文字コード文字列は、/PARAMS キーワードを使用して キーワード・パラメータとして指定することができます。

timeout

OPEN 要求の成功を待機する時間を指定します (秒)。先頭のコロンは必須です。timeout は、必ず整数値または式で指定します。timeout がゼロ (0) の場合、OPEN はファイルを開く操作を 1 回試行します。実行が失敗した場合、OPEN も即座に失敗します。試行に成功した場合は、ファイルが無事に開きます。timeout を設定していない場合、Caché は OPEN が成功するまで、またはプロセスが手動で終了されるまで、デバイスを開く操作を繰り返します。timeout オプションを使用し、デバイスを開く操作に成功した場合、Caché は特殊変数 $TEST を 1 (TRUE) に設定します。タイムアウト時間内にデバイスを開くことができなかった場合、Caché は $TEST を 0 (FALSE) に設定します。$TEST は、ユーザが設定することもできます。また、JOBLOCK、または READ のタイムアウトで設定されることもあります。

mnespace

このデバイスによって使用されるデバイス制御ニーモニックを含む、ニーモニック・スペースの名前です。既定で、Caché は磁気テープ・デバイス用に ^%XMAG を、その他すべてのデバイスとシーケンシャル・ファイル用に ^%X364 (ANSI X3.64 互換性) の 2 つのニーモニック・スペースを提供しています。既定のニーモニック・スペースは、デバイスのタイプごとに割り当てられます。

管理ポータルに進み、システム, 構成, デバイス設定, IO設定 を選択します。[ファイル]、[磁気テープ]、[その他]、または [ターミナル] のニーモニック・スペース設定を表示して編集します。

ニーモニック・スペースは、READ コマンドと WRITE コマンドによって使用されるデバイス制御ニーモニックに対するエントリ・ポイントを含むルーチンです。READ コマンドと WRITE コマンドは、/mnemonic(params) 構文を使用して、デバイス制御ニーモニックを呼び出します。このデバイス制御ニーモニックは、カーソルを画面内の指定された位置に移動したり、磁気テープを巻き戻したりする処理を実行します。

mnespace 引数を使用して、既定のニーモニック・スペースの割り当てをオーバーライドします。このデバイスで使用されている制御ニーモニック・エントリ・ポイントを含む、ObjectScript ルーチンを指定します。二重引用符は必須です。このオプションは、READ コマンドや WRITE コマンドでデバイス制御ニーモニックを使用したい場合にのみ指定します。ニーモニック・スペースが存在しない場合は、<NOROUTINE> エラーが返されます。ニーモニック・スペースに関する詳細は、"Caché 入出力デバイス・ガイド" の "入出力デバイスとコマンド" を参照してください。

以下の例は、OPEN コマンドでデバイス 2 (スプーラ) の所有権を取得するものです。最初の位置パラメータ (3) で、グローバル ^SPOOL 内のファイル番号を指定し、2 番目の位置パラメータ (12) で、そのファイル内の行番号を指定しています。後から USE コマンドを使用してこれを現在のデバイスに指定する (つまり USE 2) 場合、ObjectScript はそれ以降の出力をスプーラに送信します。

   OPEN 2:(3:12)

以下の例は、OPEN コマンドで、シーケンシャル・ファイル CUSTOMER の所有権をタイムアウト時間 10 秒以内に取得します。

   OPEN "\myfiles\customer"::10

パラメータが指定されていないので括弧は省略されますが、それでもコロンは必要です。

以下の例は、Seqtest というシーケンシャル・ファイルを開きます。文字コード位置パラメータは "NRW" です。"N" 文字コードは、ファイルが存在しない場合に、この名前を持つ新規のシーケンシャル・ファイルを作成するように指定します。"R" と "W" 文字コードは、そのファイルが読み取りまたは書き込みのために現在開いていることを意味します。タイムアウトは 5 秒です。

  NEW $NAMESPACE
  SET $NAMESPACE="%SYS"
  SET dir=##class(%SYSTEM.Process).CurrentDirectory()  ; determine Caché directory 
  SET seqfilename=dir_"Samples\Seqtest"
  OPEN seqfilename:("NRW"):5
    WRITE !,"Opened a sequential file named Seqtest"
    USE seqfilename
    WRITE "a line of data for the sequential file"
  CLOSE seqfilename:"D"
  WRITE !,"Closed and deleted Seqtest"
  QUIT

この例では、UnknownUser が %DB_CACHESYS ロールを割り当てている必要があります。

メモ

デバイスの所有権と現在のデバイス

OPEN は、指定されたデバイスの所有権を設定します。プロセスは、プロセスが終了するか、後続の CLOSE コマンドでデバイスが解放されるまで、そのデバイスの所有権を維持します。あるプロセスがデバイスを所有している間は、他のプロセスがこのデバイスを取得したり、使用したりすることはできません。

プロセスは、同時に複数のデバイスを所有できます。しかし、現在のデバイスにできるデバイスは 1 つだけです。所有しているデバイスを現在のデバイスとして設定するには、USE コマンドを使用します。現在のデバイスのデバイス ID は、$IO 特殊変数に含まれています。

プロセスは、常に少なくとも 1 つのデバイスを所有しています (device 0 として指定されます)。これが、そのプロセスの主デバイスです。このデバイスは、プロセスの起動時に割り当てられます。通常は、Caché へのサインオンに使用されたターミナルです。主デバイスの ID は、$PRINCIPAL 特殊変数に含まれています。

プロセスが終了すると、Caché は、そのプロセスによって所有されている各デバイスに対して、暗黙の CLOSE を実行し、デバイスを使用可能デバイスのプールに返します。

所有デバイスのパラメータの変更

既にプロセスが所有しているデバイスのパラメータを変更するには、以下の方法があります。

  • デバイスをいったん閉じて、新しいパラメータ値で再び開く。

  • デバイスがターミナル、TCP、または磁気テープ・デバイスの場合、既に開かれているデバイスに対する新しいパラメータ値で OPEN を発行できます。

他の OPEN コマンドでそのデバイスを指定する場合、最初の OPEN コマンドで設定されたデバイス・パラメータは、明示的に変更されない限り、有効のままとなります。デバイスの種類によっては、デバイスをいったん閉じて再び開いた場合に、後続の入出力が異なる可能性があります。

一部のデバイスでは、parameters オプションを省略し、後で USE コマンドの parameters オプションを使用して、必要な特性を設定することができます。

デバイスの指定

デバイスを開くとき、そのデバイスに割り当てられているデバイス番号、またはエイリアスでデバイスを識別できます。

物理デバイス番号の使用法

Caché では、システムによって割り当てられている物理デバイス番号によって、任意のデバイスを識別できます。Caché では、どの実装タイプでも、以下の物理デバイス番号を認識します。

  • 0 = プロセスの主デバイス (通常はサインオンのときに使用したデバイス)

  • 2 = スプーラ (後で印刷するために出力を保持する)

  • 63 = 表示バッファ

OPEN 63 は、以下の例に示すように、ネームスペースを受け入れます。

   OPEN 63:"SAMPLES"

存在しないネームスペースを指定した場合、Caché は <NAMESPACE> エラーを発行します。特権を持たないネームスペースを指定した場合、Caché は <PROTECT> エラーを発行します。

デバイス 3 は無効なデバイスになります。この番号のデバイスをオープンしようとすると、timeout の期限切れを待たずに <NOTOPEN> エラーが返されます。

デバイス番号に関する詳細は、"Caché 入出力デバイス・ガイド" の "入出力デバイスの詳細" を参照してください。

デバイス・エイリアスの使用法

エイリアスは数値デバイス ID の別名です。これは、有効なデバイス番号でなければならず、一意である必要があり、割り当てられたデバイス番号と競合してはなりません。

デバイスに対する数値エイリアスを作成できます。管理ポータルで システム, 構成, デバイス設定, デバイス を選択し、現在のデバイスとそのエイリアスのリストを表示します。対象のデバイスに対して [編集] をクリックし、その [エイリアス :] オプションを編集します。

デバイスのエイリアスを割り当てた後、OPEN コマンド、または %IS ユーティリティ を使用して、このエイリアスを使用するデバイスを開きます。

開くファイル数割り当ての超過

Caché は、データベース・ファイルと OPEN で開くファイルとの間で、プロセスごとに開くことができるファイル数を割り当てます。OPEN によって OPEN コマンドに割り当てられるファイル数が多すぎる場合、<TOOMANYFILES> エラーが返されます。Caché のプロセスごとに開くことができるファイルの最大数は 1,024 です。プロセスごとに開くことができるファイルの実際の最大数は、プラットフォーム固有の設定です。例えば、Windows の既定では、プロセスごとに開くことができるファイルの最大数は 998 です。

既定のレコード長

OPEN コマンドにシーケンシャル・ファイルのレコード・サイズが指定されていない場合、Caché は、長い文字列が有効になっているかどうかに関係なく、既定の 32,767 文字を想定します。

関連項目

FeedbackOpens in a new tab