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


前へ 次へ 目次 索引


11.10 論理名テーブルの作成

CREATE/NAME_TABLE コマンドは,論理名テーブルを作成し,それをディレクトリ論理名テーブルの1つにカタログ化します。論理名テーブルを識別する,または論理名テーブルに反復的に変換する論理名は,常にディレクトリ論理名テーブルの 1つに入力する必要があります。

11.10.1 プロセス固有の論理名テーブルの作成

プロセスに固有の論理名テーブルを作成するには,テーブルを LNM$PROCESS_DIRECTORY(省略時設定)に作成します。

ディレクトリ・テーブルの名前には1〜31の文字を含むことができます。大文字英数字,ドル記号($),アンダスコア(_)だけが有効です。小文字のテーブル名を指定すると,自動的に大文字に変換されます。

次の例では,TAXという名前のプロセス固有論理名テーブルを作成し,論理名 CREDIT の定義をテーブル内に配置し,テーブルの作成をチェックします。SHOW LOGICAL/TABLE コマンドにより,表示する論理名テーブルを指定することができます。


$ CREATE/NAME_TABLE TAX
$ DEFINE/TABLE=TAX CREDIT [ACCOUNTS.CURRENT]CREDIT.DAT
$ SHOW LOGICAL/TABLE=TAX CREDIT
 "CREDIT" = "[ACCOUNTS.CURRENT]CREDIT.DAT" (TAX)

ファイルのフックアップ中に新しいテーブルをシステムに自動的に検索させるようにするため,次の例に示すように LNM$PROCESS を再定義することができます。


$ DEFINE/TABLE=LNM$PROCESS_DIRECTORY LNM$PROCESS LNM$PROCESS_TABLE, TAX 

11.10.2 共用可能論理名テーブルの作成

共用可能論理名テーブルを作成するには,/PARENT_TABLE 修飾子を使用し,共用可能テーブルを指定します。例を次に示します。


$ CREATE/NAME_TABLE/PARENT_TABLE=LNM$SYSTEM_DIRECTORY NEWTAB

11.10.3 クラスタ単位の論理名テーブルの作成

他の共用可能論理名テーブルを作成する場合と同様の方法で,クラスタ単位の論理名テーブルを作成することができます。クラスタ単位の論理名テーブルは,共用論理名テーブルの特殊なタイプで,すべての共用可能論理名テーブルに適用する特権とアクセス必要条件に従います( 第 11.10.4 項 を参照してください)。

次の例では,クラスタ単位の論理名テーブルを作成する方法を示します。


$ CREATE/NAME_TABLE/PARENT_TABLE=LNM$CLUSTER_TABLE - 
_$ new_clusterwide_logical_name_table

新しいクラスタ単位の論理名テーブルに常駐するクラスタ単位の論理名を作成するには,次の例に示すように,DEFINE コマンドで新しいクラスタ単位の論理名を定義して,新しいテーブルの名前を /TABLE 修飾子で指定します。


$ DEFINE/TABLE=new_clusterwide_logical_name_table logical_name - 
_$ equivalence_string

11.10.4 特権とアクセスの必要条件

特権を持つユーザは,特殊目的のために共用論理名テーブルを作成できます。例えば,アプリケーションで 1 つ以上の共用論理名テーブルを作成すると,ファイルの記憶位置などの情報をアプリケーション・ユーザとやり取りすることができます。


$ CREATE/NAME_TABLE APPX_FILE_LOCATOR /PARENT=LNM$SYSTEM_DIRECTORY - 
_$ /PROTECTION =(S:RWD,O:RWD,G:R,W:R)

共用論理名テーブルを作成するには,次のものを備えている必要があります。

共用論理名テーブルを削除するには,次のものを備えている必要があります。

11.10.5 省略時保護の変更

オペレーティング・システムは,システムまたはユーザが作成する共用論理名テーブルに対して,省略時の保護を提供します。この省略時保護はシステム管理者またはテーブル所有者が変更できるセキュリティ・プロファイルに格納されます。詳細については,『OpenVMS Guide to System Security』を参照してください。

自分が作成したテーブルの省略時保護は,次の方法で変更できます。

共用論理名テーブルのACLは,システムのブート間には保存されません。システムがブートされるごとにこれらの論理名テーブルで ACL を再設定する必要があります。

共用論理名テーブルへのACL保護の適用についての詳細は,『OpenVMS DCL ディクショナリ』の SET SECURITY/ACL コマンドを参照してください。

11.10.6 論理名テーブルへの制限値の設定

制限は,所定の論理名テーブルが消費することのできるシステム資源の量を制限するために使用します。プロセス,グループ,およびシステム論理名テーブルには,無限の制限があります。省略時設定により,論理名テーブルを作成すると,これも無限の制限を持つことになります。

制限値を指定して,作成する論理名テーブルのサイズをバイト単位で制限することができます。論理名が作成される前に,そのデータ構造のサイズがテーブルの残りの制限値に対してチェックされます。新しいエントリに使用できる制限値が十分でないと,システムはエラー・メッセージを表示します。

いったんテーブルに制限値を設定してしまうと,変更することはできません。テーブルに余地がなくなった場合は,DEASSIGNコマンドを使用して古い論理名を削除します。これで新しい論理名のためにスペースを解放できます。

次の例では,論理名テーブル ABC が作成され,500 バイトの制限値を与えられます。


$ CREATE/NAME_TABLE/QUOTA=500 ABC

11.10.6.1 ジョブ・テーブルの制限値の設定

ジョブ論理名テーブルは,共用可能テーブルです。ジョブ論理名テーブルの制限値は,テーブルの作成時に設定されます。制限値は,次の基準の1つまたはそれ以上で決まります。

ジョブ論理名テーブルに対する制限値0は,制限がないことを示します。あらゆる実用的な目的からも,制限は無限にされます。

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

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

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

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

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

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

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

次の例では,新しい論理名テーブル,NEWTAB が作成され,最初に検索されるテーブルに NEWTAB をリストして LNM$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

11.12 論理名テーブルの削除

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

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

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


$ DEASSIGN WORKFILE

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


$ DEASSIGN/TABLE=LNM$PROCESS_DIRECTORY TAX

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

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

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

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

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

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

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

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

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

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

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

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

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

11.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
   .
   .
   .

11.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 が含まれますが,ファイル指定全体は含まれません。


前へ 次へ 目次 索引