日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

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


目次 索引

第 12 章
シンボリック・リンクと POSIX パス名のサポート

V8.3 以降の OpenVMS では, Open Group 準拠のシンボリック・リンクと, POSIX 準拠のパス名がサポートされています。このサポートは, OpenVMS へ UNIX/LINUX のアプリケーションを移植する場合や, UNIX スタイルの開発環境を使用してアプリケーションを開発する場合に,その移植に伴っていた複雑さや開発コストの負担を軽減するために拡張されたものです。

OpenVMS では,シンボリック・リンクと POSIX パス名の処理をサポートするために,以下の機能を提供しています。

  • C ランタイム・ライブラリ (C RTL) に,Open Group 準拠のシンボリック・リンク関数 symlinkreadlinkunlinkrealpathlchown,および lstatが追加されています ( 第 12.3.3 項 を参照)。

  • creatopendelete,および removeなどの既存の C RTL 関数が, Open Group のシンボリック・リンク仕様に従って動作するようになっています ( 第 12.3.4 項 を参照)。

  • RMS が拡張されて,C RTL に上記の関数が実装できるようになりました。 SYS$OPEN,SYS$CREATE,SYS$PARSE,および SYS$SEARCH などの RMS ルーチンで,シンボリック・リンクをサポートできるようになっています ( 第 12.4 節 を参照)。

  • OpenVMS でファイルを検索したりそのパスをたどったりしているときにシンボリック・リンクが検出されると,その内容が POSIX のパス名として解釈されるようになりました。 OpenVMS の C RTL と RMS のインタフェースで POSIX のパス名が使用できるようになっています ( 第 12.1.2 項 を参照)。

  • C RTL に新しい機能論理名 DECC$POSIX_COMPLIANT_PATHNAMES が追加されて,アプリケーションが POSIX 準拠モードで動作することを指示できるようになっています。ただし,POSIX 準拠モードで参照できるのは,最新バージョンのファイルだけです。同じファイルの複数のバージョンにアクセスすることはできません ( 第 12.3.1 項 を参照)。

  • シンボリック・リンクの作成には,DCL コマンド CREATE/SYMLINK を使用します ( 第 12.2.1 項 を参照)。

  • システムの POSIX ルートを作成するには,DCL コマンド SET ROOT を使用します ( 第 12.5 節 を参照)。

  • マウント・ポイントを設定するために,2 つの GNV ユーティリティ mntumntが用意されています ( 第 12.7 節 を参照)。

  • DCL コマンドおよびユーティリティが変更されて,シンボリック・リンクの操作や,シンボリック・リンクを検出した場合の処理が適切に行えるようになっています ( 第 12.9 節 を参照)。

  • TCP/IP Services for for OpenVMS Network File System (NFS) のクライアントとサーバが拡張されて,ODS5 ボリューム上でシンボリック・リンクをサポートできるようになっています。

  • ln(シンボリック・リンクの作成) や ls(シンボリック・リンクの内容の表示) などの関連 GNV ユーティリティがアップデートされて,シンボリック・リンクのアクセスと管理が行えるようになっています ( 12.2.212.10 を参照)。



12.1 POSIX パス名とファイル名

POSIX のパス名は, 0 個以上のファイル名が /(パス区切り文字) で区切られた,空でない文字列から構成されています。使用するパス区切り文字は,パス名の先頭や末尾に置くことも,ファイル名とファイル名の間に置くこともできます。また,2 個以上の区切り文字を連続して置くこともできます。ただし,どの区切り文字も 1 文字として扱われます。

POSIX のファイル名には, /(パス区切り文字) と NUL (多くの API で文字列の終了文字として使用される) を除く,すべての ASCII 文字が使用できます (ただし,現在の OpenVMS システムには,POSIX ファイル名に ?文字と *文字も含めてはならないという制限があります)。ファイル名は,パス名の構成要素またはパス名のコンポーネントとも呼ばれます。

12.1.1 POSIX パス名の解釈

先頭が /で始まっているパス名は,絶対パス名として扱われ,その処理は, POSIX ルートとして指定されているデバイスおよびディレクトリから開始されます (ルートの定義方法は, 第 12.5 節 を参照してください)。

先頭が /で始まっていないパス名は相対パス名として扱われ,その処理は現在の作業ディレクトリから開始されます。

OpenVMS で現在の作業ディレクトリがどのように解釈されるかについては, 第 12.6 節 を参照してください。

POSIX ルート・ディレクトリは,絶対パス名を解決する際に使用されるディレクトリです。

ルート・ディレクトリは,ディレクトリ階層の一番上にあるノードで,自分自身が自分の親ディレクトリにもなっています。つまり,ルート・ディレクトリのパス名は /で,その親ディレクトリのパス名も /です。

OpenVMS における POSIX ルートの定義については, 第 12.5 節 を参照してください。

シンボリック・リンクは,他のファイルを指す特殊なファイルです。シンボリック・リンクはディレクトリの 1 つのエントリになっていて,サービスがアクセスするときに POSIX パス名として解釈するテキスト文字列をあるファイルに対応付ける機能があります。シンボリック・リンクへアクセスする操作のほとんどは,そのシンボリック・リンク自体に対してではなく,そのテキスト内容が参照している実際のオブジェクトに対して行われます。したがって,実際のオブジェクトが存在していないと,その操作は失敗します。 OpenVMS におけるシンボリック・リンクは,編成が SPECIAL でタイプが SYMBOLIC_LINK のファイルとして実装されています。

シンボリック・リンクでは,絶対パス名だけでなく相対パス名を指定することもできます。たとえば,内容が ".." というパスで始まるシンボリック・リンクは,その親ディレクトリを参照することになります。また,このシンボリック・リンクを別のディレクトリへ移動すれば,その新しいディレクトリの親ディレクトリを参照することになります。

OpenVMS におけるシンボリック・リンクの使用方法については, 第 12.2 節 を参照してください。

マウント・ポイントとは,ファイル・システムが接続されている位置 (実際にはディレクトリ) のことです。 OpenVMS におけるディスク・ボリュームという概念と, UNIX のファイル・システムという用語は,本質的に同じものを表しています。マウント・ポイントを確立すると,マウント・ポイントになる前の元のディレクトリにあった内容へはアクセスできなくなります。

システムをリブートすると,リブートの前に確立されていたマウント・ポイントは無効になります。

OpenVMS でマウント・ポイントを確立する方法については, 第 12.7 節 を参照してください。

次に示すように,POSIX には予約済みのファイル名が 2 つあります。

.(現在のディレクトリ)

..(親ディレクトリ)


UNIX システムでは,コンピュータ・システムの特定のハードウェア・デバイスやリソースに特殊ファイルを関連づけており,オペレーティング・システムは,デバイス・ファイルとも呼ぶこの文字型特殊ファイルを使用することで,特定の文字型デバイスに対する入出力を行えるようにしています。

特殊ファイルは,一見しただけでは,通常のファイルと同じように見えます。たとえば次のとおりです。

  • ディレクトリの下にそのパス名がある。

  • 通常ファイルと同じアクセス保護が可能である。

  • 通常ファイルの場合とほとんど同じ方法で使用できる。

しかし,この 2 つのファイルには,大きな違いがあります。つまり,通常ファイルはディスクに記録されているデータを論理的にグループ化したものですが,特殊ファイルはデバイス・エンティティに対応したものです。特殊ファイルの例を次に示します。

  • 実際のデバイス (ライン・プリンタなど)。

  • 論理サブ・デバイス (ディスク・ドライブ内の大規模セクションなど)。

  • 擬似デバイス (コンピュータの物理メモリ ( /dev/mem),ターミナル・ファイル ( /dev/tty),ヌル・ファイル ( /dev/null) など)。

サポートされている特殊ファイルは,ヌル特殊ファイル ( /dev/null) だけです。このファイルは,GNV 構成処理が実行されている間に作成されます。ヌル特殊ファイルに書き込んだデータは,廃棄されます。また,ヌル特殊ファイルに対して読み取りを実行しても,返ってくるデータは常に 0 バイトです。

12.1.2 OpenVMS インタフェースでの POSIX パス名の使用

OpenVMS のほとんどのアプリケーション,ユーティリティ,および API には, POSIX 準拠の仕様でパス名を渡すことができます。

この仕様には DCL の既存の表記法が採用されていて,引用符で囲んだ文字列の中にさらに引用符が含まれている場合は,その含まれている引用符を 2 回繰り返して指定します。

また,パス名に対して,引用符で囲んだ文字列の使用が将来制約とならないようにしておく場合は (たとえば, 他の構文バリエーションとして Windows と互換性のある名前のサポートを考えている場合など),引用符で囲んだパス名の先頭に先行タグ ^UP^を付加して, DCL,RMS,および OpenVMS のユーティリティでそれが POSIX パス名であることが分かるようにしておく必要があります。ただし,C RTL や GNV に対しては,この要件は必要ありません

以上の要件を守ると,パス名 /a/b/c"^UP^/a/b/c"で,また, /a/b"/c"^UP^/a/b""/c"でそれぞれ指定することになります。

この章の残りの部分では,「POSIX パス名」という用語で変更前のパス名 ( /a/b/cなど) を示し,「引用符で囲んだパス名」という用語で,引用符で囲んだ先行タグ付きのパス名を示します ( "^UP^/a/b/c"など)。

OpenVMS で作成するファイルに POSIX ファイル名を使用する場合は,その POSIX ファイル名と OpenVMS のファイル名が同じように表示されると理想的です。たとえば,作成するファイルの名前として POSIX ファイル名 a.bを指定した場合に, OpenVMS 側で a.b;( ;はファイル・バージョン) というファイルが自動的に作成される,という具合にです。

しかし, OpenVMS のファイル名にはその構成要素としてファイル・タイプが必要なので (少なくともピリオドが 1 文字必要),ピリオドのない POSIX ファイル名を直接マッピングすることはできません (たとえば,POSIX ファイル名 aを OpenVMS のファイル名 a;にマッピングするというようなことはできません)。 OpenVMS にとって妥当な解決方法は,ピリオドを付加して (つまりファイル・タイプ・フィールドがヌルであることを示して), POSIX ファイル名 aに対応する OpenVMS のファイル名を a.;にすることです。

ただし,この場合に注意すべきことは,POSIX ファイル名の末尾がピリオドで終わっていても, OpenVMS ではピリオド (つまり,ヌル・タイプ) を付加するということです。これは, a.という POSIX ファイル名と aという POSIX ファイル名が同時に存在している場合に,それらを区別する必要があるからです。

また,OpenVMS のディレクトリには, .DIR;1というタイプとバージョンが割り当てられています。そのため,POSIX ファイル名が aのディレクトリを OpenVMS で作成しようとすると, OpenVMS ファイル名が a.DIR;1というディレクトリが,作成されます。しかし, a.DIRは POSIX ファイル名としても有効なので,もしそのような POSIX ファイル名のファイルが同じディレクトリに存在すれば,そのファイルと, aという POSIX ファイル名のディレクトリを区別できるようにする必要があります。そのため,OpenVMS では,末尾が .DIRで終わる POSIX ファイル名にピリオド (つまり,ヌル・タイプ) を付加するようになっています。その結果,POSIX ファイル名 a.DIRa.DIR.;になります。

上記の規則に従ったファイル名のマッピング例を以下に示します。次に示すのは, OpenVMS で変更されない (バージョンの追加を除く) POSIX ファイル名の例です。

POSIX ファイル名   OpenVMS 名タイプバージョン   DIR での表示 
----------------   ----------   ------   ----------   ------------ 
     a.b               a         .b          ;            a.b; 
     a.b;              a         .b;         ;            a.b;; 
     a.b;2             a         .b;2        ;            a.b;2; 

次に示すのは,末尾がピリオド ( .) または .DIRで終わっているために, OpenVMS でファイル名を作成するときにピリオドを付加する POSIX ファイル名の例です。

POSIX ファイル名   OpenVMS 名タイプバージョン   DIR での表示 
----------------   ----------   ------   ----------   ------------ 
     a                 a           .         ;           a.; 
     a.                a.          .         ;           a^..; 
     a..               a..         .         ;           a^.^..; 
     a.b.              a.b.        .         ;           a^.b^..; 
     a.DIR             a.DIR       .         ;           a^.DIR.; 

最後に示すのは, POSIX ディレクトリの例で,OpenVMS ではそのすべての終わりに .DIR;1を付加しています。

POSIX ファイル名   OpenVMS 名タイプバージョン   DIR での表示 
----------------   ----------   ------   ----------   ------------ 
     a                a          .DIR       ;1          a.DIR;1 
     a.dir            a.dir      .DIR       ;1          a^.dir.DIR;1 
     a.               a.         .DIR       ;1          a^..DIR;1 

POSIX ファイル名に *または ?文字が含まれている場合は,マッピングできません。この問題は未解決で,将来の OpenVMS リリースで対処される予定です。

OpenVMS のファイル名を POSIX ファイル名にマッピングするときは (C RTL の関数 readdirの機能),次の規則が適用されます。

OpenVMS ファイル名の末尾が .DIR;1で終わっていて,そのファイルのタイプがディレクトリである場合は, .DIR;1が削除されます。それ以外のファイルは,OpenVMS のファイル名から末尾のセミコロンとバージョン番号が削除されます。

OpenVMS ファイル名の末尾がピリオドで終わっている場合は,そのピリオドが削除されます。

OpenVMS のファイル名に /または NUL 文字が含まれている場合はマッピングできないので,呼び出し側へは,対応するエントリが返されません。

OpenVMS のディレクトリ ..DIR;1...DIR;1は,対応する POSIX ファイル名が特別なファイル名 ...になるので,マッピングできません。

OpenVMS のファイル .は,結果として作成される POSIX ファイル名が NULL 文字列になるので,マッピングできません。

12.2 シンボリック・リンクの使用

シンボリック・リンクの作成には,次の方法があります。

  • DCL コマンド CREATE/SYMLINK を使用する ( 第 12.2.1 項 )。

  • GNV bash シェル内で ln -sユーティリティを使用する ( 第 12.2.2 項 )。

  • C RTL の symlink関数を使用する ( 第 12.3.3 項 )。



12.2.1 DCL によるシンボリック・リンクの作成と使用

DCL コマンドによるシンボリック・リンクの作成方法とアクセス方法の例を,次に示します。


#1
$ create/symlink="a/b.txt" link_to_b.txt 
$ 
$ dir/date link_to_b.txt 
 
Directory DKB0:[TEST] 
 
link_to_b.txt -> a/b.txt       
                  27-MAY-2005 09:45:15.20 

この例では,シンボリック・リンク・ファイル link_to_b.txtを作成していて,その内容は,指定したテキスト文字列,つまり,シンボリック・リンクが指すパス名 a/b.txtと同じものになっています。 a/b.txtファイルは,存在していてもいなくてもかまいません。

#2
$ type link_to_b.txt 
  %TYPE-W-OPENIN, error opening DKB0:[TEST]LINK_TO_B.TXT; as input 
 -RMS-E-FNF, file not found 

この例では,シンボリック・リンクで参照しているファイルへアクセスするために,そのシンボリック・リンク名をコマンドで指定しています。ここでは TYPE コマンドに対してエラー・メッセージが出されて,最初の例で作成したシンボリック・リンクに,対応する参照ファイル a/b.txtが存在していないことが示されています。

#3
  $ create [.a]b.txt 
     This is a text file. 
  Exit 
  $ 
  $ type link_to_b.txt 
  This is a text file 
  $ 

この例では,存在していなかったファイル b.txtを,リンクを通して作成しています。また,その後,シンボリック・リンクを通して TYPE コマンドを実行していますが,今回は参照するファイルが存在しているので,成功しています。

このファイルは,次のようにシンボリック・リンクを通して作成することもできます。

$ create link_to_b.txt 
   This is a text file. 
   Exit 
$ dir [.a] 
 
Directory DKB0:[TEST.A] 
 
b.txt;1 
$ 
$ type link_to_b.txt 
   This is a text file. 
$ 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.