日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (上巻)


前へ 次へ 目次 索引


しかし,以前からある OpenVMS アプリケーションの中には,この古い形式に依存しているものがあるかもしれません。そうしたアプリケーションを実行する場合は,ルートの下にシンボリック・リンクまたはマウント・ポイントを置くことで,そのようなファイル名を以前と同じように機能させることができます。

DECC$POSIX_COMPLIANT_PATHNAMES を有効にすると,次の C RTL 機能論理名が無視されます。

DECC$ARGV_PARSE_STYLE
DECC$DISABLE_POSIX_ROOT
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION
DECC$EFS_CASE_PRESERVE
DECC$EFS_CASE_SPECIAL
DECC$EFS_CHARSET
DECC$EFS_NO_DOTS_IN_DIRNAME
DECC$ENABLE_TO_VMS_LOGNAME_CACHE
DECC$FILENAME_UNIX_NO_VERSION
DECC$FILENAME_UNIX_ONLY
DECC$FILENAME_UNIX_REPORT
DECC$NO_ROOTED_SEARCH_LISTS
DECC$READDIR_DROPDOTNOTYPE
DECC$READDIR_KEEPDOTDIR
DECC$RENAME_ALLOW_DIR
DECC$RENAME_NO_INHERIT
DECC$UNIX_PATH_BEFORE_LOGNAME


12.3.2 decc$to_vms,decc$from_vms,および decc$translate_vms

POSIX 準拠モードで動作している場合, C RTL 関数 decc$to_vmsでは, POSIX パス名を,引用符で囲まれた RMS のパス名へ変換します。逆に, decc$from_vms関数と decc$translate_vms関数では,引用符で囲まれたパス名から引用符と接頭辞 ^UP^を削除して POSIX パス名に変更します (たとえば, "^UP^a/b"a/bになります)。 POSIX 準拠モードでなければ,これらの関数は以前と同じように動作します。

12.3.3 シンボリック・リンク関数

表 12-1 に, HP C Run-Time Library (RTL) のシンボリック・リンク関数とその説明を示します。各関数の詳細については,「リファレンス・セクション」を参照してください。

表 12-1 シンボリック・リンク関数
関数 説明
lchown ファイルのオーナとグループを変更します。ファイルがシンボリック・リンクである場合は,そのシンボリック・リンクのオーナを変更します ( chown は,シンボリック・リンクの指しているファイルを変更します)。
lstat 指定したファイルの情報を取得します。ファイルがシンボリック・リンクである場合は,そのリンク自体の情報が返されます ( stat は,シンボリック・リンクが指しているファイルの情報を返します)。
readlink シンボリック・リンクの内容を読み取って,ユーザの用意したバッファに置きます。
realpath POSIX ルートから始まる絶対パス名が返されます。この関数は,POSIX 準拠モード (つまり, DECC$POSIX_COMPLIANT_PATHNAMES が有効な場合) でだけサポートされています。
unlink システムからシンボリック・リンクを削除します。
symlink 指定した内容を持つシンボリック・リンクを作成します。



12.3.4 既存関数の変更

今までに説明した新しい関数の追加に加えて,次の C RTL 関数が,シンボリック・リンクをサポートするために変更されています。

creat
ファイルの新しいバージョンを作成するときに同じ名前のシンボリック・リンクがすでに存在していると,そのシンボリック・リンクが参照しているファイルを作成するように変更されています。

open
open関数は, file_spec パラメータで指定したファイルがシンボリック・リンクであると,そのシンボリック・リンクが指しているファイルをオープンするように変更されています。

deleteremove
deleteremove関数は,指定したファイルがシンボリック・リンクであると,そのシンボリック・リンクの参照しているファイルではなく,リンク自体を削除するように変更されています。

また,シンボリック・リンクの解決でループが見つかったときは, Open Group の仕様に従って errno値 ELOOP が返されます。

12.3.5 POSIX に準拠していない動作



12.3.5.1 同じファイルにバージョンが複数個ある場合の動作

POSIX 準拠のパス名を使用している場合は,対象となるファイルに複数のバージョンが存在していても,アクセスできるのは最新バージョンのファイルだけです。また,ファイルを削除しても,実際に削除されるのは,バージョン番号の最も高いファイルだけです。

12.3.5.2 ファイルの名前があいまいな場合の動作

同じディレクトリにファイル "a"とディレクトリ "a.DIR;1"が存在している場合に POSIX 準拠モードでアクセスすると,次のように処理されます。



12.4 RMS インタフェース



12.4.1 POSIX パス名と RMS の入出力

ここで使用している「引用符で囲んだパス名」とは,この章の前半で説明したように,先頭にタグ文字列 ^UP^を付けて,さらにその全体を引用符で囲んだ POSIX パス名のことです。また,そのような POSIX パス名の中に引用符がある場合は,その引用符を 2 個続けることで,引用符で囲まれた文字列全体が DCL の場合と同じように扱われるようにする必要があります。

引用符で囲んだパス名は,プライマリ名,デフォルト名,および関連名で使用することができます。 RMS では, ^UP^接頭辞と開始/終了引用符を検出すると,残りの文字を標準の POSIX 名として解釈します (ただし,パス名の中に引用符が 2 つ連続してある場合は,そのペアを 1 つの引用符として扱います)。また(「引用符で囲んだパス名」にワイルドカードが使用されている場合などは),「引用符で囲んだパス名」を展開して得られたファイル指定も,引用符で囲んだパス名として返します。

返された「引用符で囲んだパス名」の構成要素は,NAM または NAML で次のように参照されます。

dir フィールド,name フィールド,および type フィールドは NUL であっても構いません。

たとえば,引用符で囲んだパス名 "^UP^/a/b.c"は,次の要素から構成されています。

node は NUL。
dev は "^UP^。
dir は /a/。
name は b。
type は .c。
version は "。

シンボリック・リンクは,次の RMS ルーチンでサポートされています。

RMS で行う POSIX パス名の処理には,次の制約があります。



12.4.2 アプリケーションから制御可能な RMS のシンボリック・リンク処理

RMS が一般的なファイル操作でシンボリック・リンクに出会ったときの動作は, DCL コマンドやユーティリティなどのアプリケーションで制御できるようにする必要があります。その中でも特に必要なのは,シンボリック・リンクに格納されているパス名を,パス名の処理とディレクトリの検索に含めるかどうかの制御です。また,シンボリック・リンクに出会ったときに,その状況に応じて異なる動作を指定できる機能も必要です。

こうしたアプリケーションに必要な柔軟性を実現するために NAML$L_INPUT_FLAGS フラグが新たに定義されて,次のような制御が行えるようになっています。



12.5 POSIX ルートの定義

RMS では,POSIX 仕様の絶対パス名にある先頭の ' /' を, UNIX スタイルのルートとして解釈する必要があります。 POSIX の仕様は,この POSIX ルートからすべてが始まるものとして決められています。 POSIX ルートは,GNV のインストール・プロシージャや,新しい DCL コマンド SET ROOT で設定できます。

12.5.1 POSIX ルートの推奨位置

システムに設定する POSIX ルートの位置を指定する場合は, GNV のインストール/構成プロシージャを実行しているときに指定するか,または,SET ROOT コマンドを使用して指定する必要があります。特に指定しないで GNV をインストールすると, SYS$SYSDEVICE:[PSX$ROOT] がルートの位置として設定されます。このディレクトリをルートとして受け入れてもかまいませんが,別のディレクトリを指定することもできます。 GNV では,ルートを設定した後,オプションで " /mnt" (POSIX ルート・ディレクトリにある " mnt" ディレクトリ) に,そのシステムに接続されている各ディスク・デバイスのマウント・ポイントを作成します。

ルートの位置としてデフォルトの値を受け入れるか,デフォルト以外の位置を指定してそのディレクトリがデバイスの最上位レベルにないと,ルート・ディレクトリ以下のディレクトリ・ツリーにないファイルは,そのファイルのあるディレクトリ・ツリーのルート・ディレクトリを含むデバイスを,マウント・ポイントを介してルートの下にマウントしない限り, POSIX パス名でアクセスできません。 (このマウント・ポイントは,GNV が構成中にオプションで作成します)。ただし,このようなマウント・ポイントを作成すると,ディレクトリ・ツリーの探索でループが発生することがあります。 図 12-1 を参照してください。

図 12-1 POSIX ルートの位置



         DKB0 -> 000000 
                   | 
             +-----+----------+                
             |                | 
          PSX$ROOT         other things 
             | 
            mnt 
             | 
       +----------+-----------+ 
       |          |           | 
     DKB1       DKB2        DKB0       
                              | 
                        +-----+----------+                
                        |                | 
                    PSX$ROOT         other things 

上記以外の方法としては,デバイスの最上位レベルにあるディレクトリ,つまり MFD (Master File Directory) をルートにして,そのデバイスに対してはマウント・ポイントを作成しないという方法もあります。この方法をとれば,デバイスにあるファイルはすべて,POSIX パス名でアクセスできます。ただし,デバイス (特にシステム・デバイス) の MFD をルートにすると,ユーザがルート・ディレクトリのファイルを表示したときに ("ls /" など),MFD にあるファイルがすべて見えてしまいます。つまり,GNV ユーザにとっては,予想もしなかった OpenVMS ファイルが見えてしまうということです。この事情は DCL ユーザにとっても同様で,やはり予想外の UNIX ファイルが見えてしまいます。デバイスの MFD は,大半の一般ユーザからはアクセスできないようにしておく必要があるので,それらが見えてしまうと,予期しない障害につながることがあります。

したがって,ルートとしてデフォルトのルート・ディレクトリを使用するようお勧めします。

マウント・ポイントについての詳細は, 第 12.7 節 を参照してください。

12.5.2 SET ROOT コマンド

このコマンドのフォーマットは,次のとおりです。


SET ROOT  デバイス名:ディレクトリ指定

SET ROOT は,POSIX ルートを定義するためのコマンドです。 POSIX パス名処理モードで動作している RMS と C ランタイム・ライブラリでは,パス名の先頭にある ' /' を,ルートを表す文字として扱います。特に指定しなければ,SYS$SYSDEVICE:[PSX$ROOT] がルートになります。

ルートの定義は,リブートすると無効になります。

SET ROOT コマンドでは,次の修飾子を指定できます。



/LOG (デフォルト)



/NOLOG

SET ROOT コマンドでルートの設定に成功したことを表示するかどうかを制御します。


12.5.3 SHOW ROOT コマンド

SHOW ROOT は,システムのルートを表示するためのコマンドです。このコマンドは,プロセスのルートが定義されていれば,その現在の値も表示します。

このコマンドのフォーマットは,次のとおりです。


SHOW ROOT



12.6 現在の作業ディレクトリ

UNIX システムでは,先頭がスラッシュで始っていないパス名の解決に,現在の作業ディレクトリを使用します。

RMS でシンボリック・リンクに出会った場合は,そのシンボリック・リンクのあるディレクトリを現在の作業ディレクトリにして,パス名を解決します。

RMS に直接渡された POSIX パス名を解決する場合は,そのプロセスに現在割り当てられている OpenVMS のデフォルト・ディレクトリが,現在の作業ディレクトリになります。 OpenVMS のデフォルト・ディレクトリが複数個ある場合 (たとえば,ディレクトリの指定に検索リストが含まれている場合) は,検索リストを通して最初に見つかったディレクトリが,現在の作業ディレクトリになります。

12.7 マウント・ポイントの設定

ファイル・システムをマウント・ポイントにマウントしたり,マウント・ポイントからディスマウントしたりするためのユーティリティとして, mntumntという新しいユーティリティが 2 つ使用できるようになりました。ただし,ファイル・システムをマウントまたはディスマウントできるのは, CMKRNL 特権を持つユーザだけです。これらのユーティリティは,GNV の一部として出荷されています。

これらのユーティリティには,マウント・ポイントの論理名テーブルが専用に用意されていて,管理されています。現在利用可能なマウント・ポイントを表示するように要求すると,これらのユーティリティはこのテーブルを使用してそれらを表示します。

これらのユーティリティのインタフェースは,次のとおりです。

mnt
   既存のマウント・ポイントをリストにして表示します。

mnt file_system mount_point
   ファイル・システム file_system を,マウント・ポイント mount_point にマウントします。

umnt mount_point
   マウント・ポイント mount_point にマウントされているファイル・システムをアンマウントします。

umnt file_system
   ファイル・システム file_system を,マウント・ポイントからアンマウントします。

umnt -A
   ファイル・システムをすべて,マウント・ポイントからアンマウントします。

引数には,OpenVMS のファイル指定または POSIX パス名を指定できます。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項