12.4.1 POSIX パス名と RMS の入出力 |
|
ここで使用している「引用符で囲んだパス名」とは,この章の前半で説明したように,先頭にタグ文字列
^UP^を付けて,さらにその全体を引用符で囲んだ POSIX パス名のことです。また,そのような POSIX パス名の中に引用符がある場合は,その引用符を 2 個続けることで,引用符で囲まれた文字列全体が DCL の場合と同じように扱われるようにする必要があります。
引用符で囲んだパス名は,プライマリ名,デフォルト名,および関連名で使用することができます。 RMS では,
^UP^接頭辞と開始/終了引用符を検出すると,残りの文字を標準の POSIX 名として解釈します (ただし,パス名の中に引用符が 2 つ連続してある場合は,そのペアを 1 つの引用符として扱います)。また(「引用符で囲んだパス名」にワイルドカードが使用されている場合などは),「引用符で囲んだパス名」を展開して得られたファイル指定も,引用符で囲んだパス名として返します。
返された「引用符で囲んだパス名」の構成要素は,NAM または NAML で次のように参照されます。
- node は NULL である。
- dev は "^UP^ である。
- dir は, dev 文字列と最後のスラッシュ (/) との間にあるすべての文字と最後のスラッシュから構成される。
- name は, dir の直後から最後のピリオド (.) までの間にあるすべての文字から構成される (最後のピリオドがない場合は,dir の直後から終了二重引用符 (") までの間にあるすべての文字から構成される)。
- type は, name の直後から終了二重引用符 (") までの間にあるすべての文字から構成される。
- version は二重引用符 (") である。
dir フィールド,name フィールド,および type フィールドは NUL であっても構いません。
たとえば,引用符で囲んだパス名
"^UP^/a/b.c"は,次の要素から構成されています。
node は NUL。
dev は "^UP^。
dir は /a/。
name は b。
type は .c。
version は "。
シンボリック・リンクは,次の RMS ルーチンでサポートされています。
- SYS$OPEN --- シンボリック・リンクが指しているファイルを対象にして動作します。
- SYS$CREATE --- シンボリック・リンクが指しているファイルを作成します。
- SYS$PARSE ---ファイル指定文字列を解析して,さまざまな NAM ブロック・フィールドを埋めます。
- SYS$SEARCH ---ターゲット・ファイルの DVI と FID を返します。 DID はゼロです。結果として得られる名前は,ターゲット・ファイルの名前ではなく,シンボリック・リンクの名前です。
NAML$V_OPEN_SPECIAL を設定すると,SYS$OPEN と SYS$SEARCH はシンボリック・リンクをたどらなくなります。
RMS で行う POSIX パス名の処理には,次の制約があります。
- 引用符で囲んだパス名でプライマリ・ファイルを指定した場合, SYS$SEARCH から返されるファイルは 1 つだけです。また,パス名には,ワイルドカードとして定義されている文字は使用できません。
- 引用符で囲んだパス名でプライマリ・ファイルを指定すると,デフォルトの指定と,関連する指定が無視されます。
- OpenVMS の従来のファイル指定方法でプライマリ・ファイルを指定する場合は,デフォルトの指定に,引用符で囲んだパス名を使用できます。ただし,そのデフォルトの指定から使用されるのは,ファイル名とタイプだけです。
12.4.2 アプリケーションから制御可能な RMS のシンボリック・リンク処理 |
|
RMS が一般的なファイル操作でシンボリック・リンクに出会ったときの動作は, DCL コマンドやユーティリティなどのアプリケーションで制御できるようにする必要があります。その中でも特に必要なのは,シンボリック・リンクに格納されているパス名を,パス名の処理とディレクトリの検索に含めるかどうかの制御です。また,シンボリック・リンクに出会ったときに,その状況に応じて異なる動作を指定できる機能も必要です。
こうしたアプリケーションに必要な柔軟性を実現するために NAML$L_INPUT_FLAGS フラグが新たに定義されて,次のような制御が行えるようになっています。
- SYS$OPEN のデフォルト動作では,渡されたパス名がシンボリック・リンクであると,そのシンボリック・リンクに格納されているパス名で指定されたファイルがオープンされます。 NAML$V_OPEN_SPECIAL フラグを設定しておくと,そのシンボリック・リンク・ファイル自体がオープンされます。
- NAML$V_OPEN_SPECIAL フラグを設定しておくと, SYS$SEARCH を呼び出して得られる結果がシンボリック・リンクである場合に,そのシンボリック・リンク自体の DVI と FID が返されます。それ以外の場合は,デフォルトの動作が実行されます。つまり,そのシンボリック・リンクに格納されているパス名で指定されたファイルの DVI と FID が返されます。ただし,そのパス名もシンボリック・リンクになっている場合は,シンボリック・リンクでないパス名が見つかるまで処理が繰り返された後, DVI と FID が返されます。
- SYS$SEARCH でワイルドカードによるディレクトリ検索を行う場合は,その過程でシンボリック・リンクを検出しても,それがディレクトリを参照しているかどうかを調べません。
また,ODS-5 ボリュームでは, RMS 操作でシンボリック・リンクに従うかどうかを指定するのに SPECIAL_FILES フラグが使用されます。シンボリック・リンクに従う RMS 操作としては, SYS$OPEN,SYS$CREATE,SYS$SEARCH,およびすべてのディレクトリ・パスの解釈があります。
SPECIAL_FILES フラグの設定方法については,『HP OpenVMS System Services Reference Manual』および『HP OpenVMS DCL ディクショナリ』を参照してください。