OpenVMS
ユーザーズ・マニュアル


前へ 次へ 目次 索引


13.11 論理名変換の順序の変更

LMN$FILE_DEV は,検索される論理名テーブル,および論理名変換の検索順序を定義します。一般には,省略時設定の検索順序を変更する必要はありません。ただし,新しい,プロセス固有の論理名テーブルの名前を追加して, LNM$FILE_DEV で指定されたテーブルより先に検索されるようにしたい場合もあります。同様に,システム管理者が,1つ以上の共用可能論理名テーブルの名前を追加して, LNM$FILE_DEV で指定されたテーブルより先に検索されるようにしたい場合もあります。

システムが最初に検索する論理名の新しいテーブルで LMN$FILE_DEV のプロセス固有定義を作成するには,次の手順にしたがいます。

  1. 新しい論理名を含むファイルを作成します。

  2. この新しいファイルを新しい論理名テーブルに変換します。

  3. プロセス論理名ディレクトリ・テーブルを親テーブルとして指定して, LNM$FILE_DEV の固有定義を作成します。

  4. LNM$FILE_DEV の固有定義のテーブル名リストの始めに新しい論理名テーブル名を追加します。

次の例では,新しい論理名テーブル,NEWTAB が作成され,最初に検索されるテーブルに NEWTAB をリストして LMN$FILE_DEV のプロセス固有定義が作成されます。


$ CREATE/NAME_TABLE NEWTAB
$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY LNM$FILE_DEV -
_$ NEWTAB, LNM$PROCESS, LNM$JOB, LNM$GROUP, LNM$SYSTEM

上記の例では,次の理由からシステムは NEWTAB テーブルを最初に検索します。

LNM$FILE_DEV のシステム定義に新しい論理名テーブルを追加する場合には, SYSNAM または SYSPRV 特権を備えている必要があります。

次の例は, NEWTAB がプロセス固有テーブルではなく共用可能テーブルとして作成される点を除いては,以前のものと同様です。


$ CREATE/NAME_TABLE/PARENT=LNM$SYSTEM_DIRECTORY NEWTAB
$ DEFINE/TABLE=LNM$SYSTEM_DIRECTORY LNM$FILE_DEV -
_$ NEWTAB, LNM$PROCESS, LNM$JOB, LNM$GROUP, LNM$SYSTEM

LNM$FILE_DEV によって定義された検索リストから論理名テーブルを削除することもできます。次の例では,LNM$FILE_DEV のプロセス固有定義が,プロセスおよびシステム論理名テーブルだけを含むように作成されます。プロセス固有定義には LNM$JOB および LNM$GROUP が含まれないので,論理名を変換する必要のある後続のコマンドはそのジョブまたはグループ・テーブルを検索しません。


$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY - 
_$ LNM$FILE_DEV LNM$PROCESS,LNM$SYSTEM

13.12 論理名テーブルの削除

論理名テーブルを削除するには,それを含むテーブル (システムまたはプロセス・ディレクトリ論理名テーブル) とテーブルの名前を指定します。親論理名テーブルを削除すると,子孫のテーブルにあるすべての論理名 (と子孫のテーブル自身) が削除されます。

共用可能論理名テーブルを削除するには,テーブルへの DELETEアクセスまたはSYSPRV特権を備えている必要があります。

次の例では,コマンドが論理名 WORKFILE を削除します。


$ DEASSIGN WORKFILE

次の例では,コマンドがプロセス・ディレクトリ・テーブルから論理名テーブルTAXを削除します。


$ DEASSIGN/TABLE=LNM$PROCESS_DIRECTORY TAX

13.13 プロセスパーマネント論理名

DCLは,ログイン時にプロセスパーマネント論理名を作成します。これらの名前の定義は,プロセスの期間中にわたり有効です。これらの論理名を再割り当てすることはできません(DEFINE コマンドに別の等価文字列を指定して) これらを再定義することはできますが,再定義された名前が後に再割り当てされると,プロセスパーマネント名は再設定されます。

次のプロセスパーマネント論理名が使用できます。

13.13.1 会話型とバッチ処理の間の等価名の相違点

システムを会話型で使用する場合には,DCLが SYS$INPUT, SYS$OUTPUT,SYS$ERROR,SYS$COMMAND を使用するターミナルに等しいと定義します。ただし,コマンド・プロシージャを実行してバッチ・ジョブを発行すると, DCLはこれらの論理名に対して新しい等価文字列を作成します。

コマンド・プロシージャを会話型で実行すると,次の状況が生じます。

バッチ・ジョブを発行すると,次の状況が生じます。

コマンド・プロシージャをネストすると (つまり,他のコマンド・プロシージャを実行するコマンド・プロシージャを記述する場合), SYS$INPUT の等価文字列が現在実行中のコマンド・プロシージャを指すように変更されます。ただし,SYS$OUTPUT,SYS$ERROR,SYS$COMMAND の等価文字列は,明示的に変更を加えない限り変化はありません。

さらに,ファイルをオープンするコマンドを入力すると, DCLはそのファイルをプロセスパーマネント・ファイルとしてオープンします。たとえば,OPENコマンドでファイルをオープンすると,このファイルはプロセスパーマネント・ファイルとしてオープンされます。ファイルを明示的にクローズするか,またはログアウトするまで,このファイルはオープンされた状態です。

プロセスパーマネント・ファイルは,メモリの特殊な領域に格納されます。同時に多数のファイルをオープンした状態にしておくと,この領域を消耗してしまう可能性があるので注意してください。そのような状況が発生したら,ファイルをいくつかクローズ (するかまたはログアウト) してください。

13.13.2 プロセスパーマネント論理名を使用するファイル入出力の切り換え

プロセスパーマネント論理名を使用して,ファイル入出力を切り換えることができます。コマンド・プロシージャで,これらの名前を使用してターミナルからのデータを読み込み,データを表示することができます ( 第 15 章 および 第 16 章 を参照してください)。DCLは, SYS$INPUT および SYS$COMMAND に対する新しい定義を無視するので注意してください。

OpenVMS バージョン 7.1 では,DCL PIPE コマンドが導入されました。 PIPE コマンドは,ファイル入出力を切り換える代替方法です。PIPEコマンドについては,『Compaq OpenVMS DCL ディクショナリ: N--Z』を参照してください。

13.13.2.1 SYS$INPUT の再定義

SYS$INPUT を再定義して,コマンド・プロシージャによって起動されたイメージが端末や他のファイルからの入力を読み込むようにすることができます。 DCLは常に省略時設定の入力ストリームから入力を取得するので, DCLはSYS$INPUT の再定義を無視します。

次の例で,コマンドは新しいコマンド・プロシージャ・ファイルの一部です。 DEFINE コマンドは,SYS$INPUT を SYS$COMMANDに再定義します。 SYS$COMMAND は,ログイン時の最初の入力ストリームであるターミナルを参照します。この新しい定義で,コマンド・プロシージャによって起動されたイメージは,コマンド・プロシージャ・ファイルから (省略時設定) ではなくターミナルから入力を取得しますが,これは特定の期間に限られます。

/USER_MODE 修飾子は, SYS$INPUT が次のイメージの期間だけ再定義されることをコマンド・プロシージャに知らせます。この例では,次のイメージはエディタです。エディタが終了すると, SYS$INPUT はその省略時設定値を再開します。この場合,省略時設定値は,コマンド・プロシージャ・ファイルです。


$ DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
$ EDIT/TPU MYFILE.DAT
   .
   .
   .

13.13.2.2 SYS$OUTPUT の再定義

SYS$OUTPUT を再定義して,省略時設定の装置から別のファイルに出力を切り換えることができます。 SYS$OUTPUT を再定義すると,システムは論理名割り当てで指定した名前でファイルをオープンします。 SYS$OUTPUT を定義すると,すべての後続の出力は新しいファイルに出力されます。

忘れずに SYS$OUTPUT を割り当て解除してください。解除しないと,出力は指定したファイルに引き続き書き込まれます。ユーザ・モードで SYS$OUTPUTを再定義して (DEFINE/USER_MODE で),出力をイメージから切り換えることもできます。この定義は,次のコマンド・イメージが実行されるまでしか有効ではありません。いったんコマンド・イメージが実行されると (つまり,出力がファイルに取り込まれると),論理名 SYS$OUTPUT はその省略時設定値を再開します。

ログイン時に,システムは SYS$OUTPUTという2つの論理名を作成します。 1つの名前はエグゼクティブ・モードで作成され,もう1つの名前はスーパバイザ・モードで作成されます。 SYS$OUTPUTを再定義してスーパバイザ・モード論理名を優先することができます。スーパバイザ・ノード名を再割り当てすると,システムは,エグゼクティブ・モードの等価文字列を使用して SYS$OUTPUT をスーパバイザ・モードで再定義します。エグゼクティブ・モード名は,割り当て解除することはできません。

SYS$OUTPUT をファイルに再定義すると,出力が指定したファイルに向けられていても,論理名にはファイル指定の装置部分しか含まれません。

SYS$OUTPUT を再定義したとき,システムが指定したファイルをオープンできない場合には,エラー・メッセージが表示されます。

SYS$OUTPUTを再定義すると,ほとんどのコマンドは出力を既存のバージョンのファイルに向けます。ただし,新しいバージョンのファイルを作成してから出力を書き込む特定のコマンドもあります。

次の例では,SYS$OUTPUT が MYFILE.LIS として定義されてから, SHOW DEVICES コマンドが入力されます。SHOW DEVICES によって生成される表示は,ターミナルではなく現在のディレクトリの MYFILE.LIS に向けられます。他のテキスト・ファイルの場合と同様に,このデータを操作することができます。


$ DEFINE SYS$OUTPUT MYFILE.LIS
$ SHOW DEVICES

以下の例では,SYS$OUTPUT がファイル TEMP.DATに再定義されています。SYS$OUTPUT が再定義されると, DCLからの出力とイメージからの出力はファイル TEMP.DAT に向けられます。 SHOW LOGICAL コマンドからの出力と SHOW TIME コマンドからの出力も, TEMP.DATに向けられます。SYS$OUTPUT が再割り当てされると,システムはファイル TEMP.DAT をクローズして, SYS$OUTPUT をターミナルに再定義します。TYPE コマンドが入力されると,TEMP.DAT に集められた出力がターミナルに表示されます。


$ DEFINE SYS$OUTPUT TEMP.DAT
$ SHOW LOGICAL SYS$OUTPUT
$ SHOW TIME
$ DEASSIGN SYS$OUTPUT
$ TYPE TEMP.DAT
   "SYS$OUTPUT" = "DISK1:" (LNM$PROCESS_TABLE) 
  06-MAY-1998 13:26:53

SYS$OUTPUT が再定義されると,等価文字列には装置名 DISK1 が含まれますが,ファイル指定全体は含まれません。

13.13.2.3 SYS$ERROR の再定義

SYS$ERROR を再定義して,エラー・メッセージを指定するファイルに向けることができます。ただし,SYS$ERROR を再定義したためこれが SYS$OUTPUT と異なる場合 (または SYS$ERROR を同時に再定義せずに SYS$OUTPUT を再定義した場合) には, DCLコマンドは SYS$ERROR と SYS$OUTPUT の両方に,情報,警告,エラー,重大エラーメッセージを送ります。このため, SYS$ERROR の定義によって指示されたファイルで1回,そして SYS$OUTPUT によって指示されたファイルで1回と,これらのメッセージを合計2回受け取ることになります。正常終了のメッセージが送られるのは, SYS$OUTPUTに指示されたファイルだけです。

標準のエラー表示メカニズムを使用するDCLコマンドとイメージは, SYS$ERRORがSYS$OUTPUTと異なっていても, SYS$ERRORとSYS$OUTPUTの両方にエラー・メッセージを送ります。ただし,SYS$ERRORを再定義してから SYS$ERRORを参照するイメージを実行する場合,イメージがエラー・メッセージを送るのは, SYS$ERRORで指示されたファイルだけです。これは, SYS$ERRORがSTS$OUTPUTと異なっている場合でも該当します。

13.13.2.4 SYS$COMMAND の再定義

SYS$COMMAND を再定義することはできますが, DCLはその定義を無視します。DCLは常に,最初の入力ストリームに対して省略時の定義を使用します。ただし,SYS$COMMANDを参照するイメージを実行する場合には,イメージは新しい定義を使用することができます。


前へ 次へ 目次 索引