# Compaq OpenVMS
Extended File Specifications の手引き

前へ | 次へ | 目次 | 索引

## 4.2.2 完全サポートへのアップグレード

システム管理ユーティリティやディスク管理ユーティリティなど一部の OpenVMS アプリケーションでは，Extended File Specifications の完全サポートが必要です。通常，このようなユーティリティは，DID や FID の短縮形を持たないすべてのファイル指定を表示し，操作しなければなりません。Extended File Specifications のすべての機能を完全にサポートするようにアプリケーションをアップグレードするには，次の操作を行います。

1. RMS NAM ブロックの使用部分をすべて新しい NAML ブロックに変換します。

2. RMS で使用している入力ファイル名バッファと出力ファイル名バッファを拡張します。このためには，短いバッファ・ポインタ (NAML$L_ESA と NAML$L_RSA) ではなく，NAML の拡張バッファ・ポインタと結果バッファ・ポインタ (NAML$L_LONG_EXPAND と NAML$L_LONG_RESULT) を使用し，バッファ・サイズを NAM$C_MAXRSS から NAML$C_MAXRSS に増やします。

3. FAB ファイル名のバッファ・フィールド (FAB$L_FNA) に長い (255 バイトを超える) ファイル名が指定されている場合には，NAML のファイル名バッファ・フィールド (NAML$L_LONG_FILENAME) を代わりに使用します。FAB の省略時の名前バッファ・フィールドに (FAB$L_DNA) 長いファイル名が指定されている場合には， NAML の省略時の名前バッファ・フィールド (NAML$L_LONG_DEFNAME) を代わりに使用します。

4. LIB$FIND_FILE ルーチン，LIB$RENAME ルーチン，または LIB$DELETE ルーチンを使用する場合には， flags 引数に LIB$M_FIL_LONG_NAMES を設定します (flags は，LIB$DELETE ルーチンの新しい引数です)。 NAML ブロックを NAM ブロックの代わりに使用すると，他に変更を加えずに情報を LIB$FILE_SCAN に渡すことができることに注意してください。

5. LIB$FID_TO_NAME ルーチンを使用する場合には，返されるファイル指定の記述子を変更して，4095 (NAML$C_MAXRSS) バイトに増加された最大バイト数に対応するよう変更しなければならない可能性があります。

6. FDL$CREATE ルーチン，FDL$GENERATE ルーチン，FDL$PARSE ルーチンまたは FDL$RELEASE ルーチンを使用する場合には， flags 引数に FDL$M_LONG_NAMES を設定しなければなりません。

7. ソース・コードを調べて，ファイル指定が 8 ビットで 255 文字を超えないという仮定が内部的に設定されていないことを確認します。

# 付録 A
ユーザを対象とした Extended File Specifications の注意点

Extended File Specifications により，ユーザは Windows スタイルのファイル指定を OpenVMS 環境で使用できるようになります。ユーザが Extended File Specifications の環境になじめるようにする方法の 1 つに，ODS-2 と ODS-5 で見られるファイル名のいくつかの相違点について説明することがあります。相違点としては，ODS-2 から ODS-5 のスタイルに切り替えた場合に最も目立つものを取り上げます。

この後の節では，システム管理者がユーザに知らせておくと効果的であると思われる使用上の注意を示します。これらの注意点は，次のように分類されます。

- Extended File Specifications の新しい特性

- ODS-2 と ODS-5 の同時使用

- アーキテクチャに関する注意点

# A.1 Extended File Specifications の新しい特性

この節では，ユーザが初めて使用する Extended File Specifications の新しい特性に関する注意事項について説明しています。

◆ボリューム構造を意識すること

ODS-5 ファイルを ODS-5 ボリュームに格納できるように，ディスクが ODS-2 ボリュームであるか，または ODS-5 ボリュームであるかを把握しておく必要があります。

ボリューム・タイプは，次のようなコマンドを実行することによって表示できます。

    $ SHOW DEVICE DKA500:/FULL

      Disk AABOUT$DKA500:, device type RZ25, is online, allocated, deallocate
      on dismount, mounted, file-oriented device, shareable.

        Error count                    0    Operations completed 155
        .
        .
        .
      Volume Status:  ODS-5, subject to mount verification, file high-water
      marking, write-back caching enabled.

    $ SHOW DEVICE DKA200:/FULL

      Disk AABOUT$DKA200:, device type RZ25, is online, allocated, deallocate
      on dismount, mounted, file-oriented device, shareable.

        Error count                    0    Operations completed 232
        .
        .
        .

      Volume Status:  ODS-2, subject to mount verification, file high-water
      marking, write-back caching enabled.

それぞれのコマンドの後に表示される "Volume Status:" は，ボリュームが ODS-5 であるか，または ODS-2 であるかを示しています。

◆ODS-2 ボリューム上では拡張ファイル名を使用しない

ODS-2 ボリューム上では，拡張ファイル名を持つファイルを作成することができません。

次の例では， DKA200 が ODS-2 ボリューム，解析スタイルが EXTENDED であるため， RMS は，エラー・メッセージを返します。

    $ SET DEFAULT DKA200:[TEST]
    $ CREATE x.x.x.x
    %CREATE-E-OPENOUT, error opening DAK200:[TEST]X^.X^.X.X; as output
    -RMS-E-CRE, ACP file create failed
    -SYSTEM-W-BADFILEVER, bad file version number

◆大文字と小文字の区別は拡張ファイル名を最初に作成したときに決まる

ODS-5 ボリューム上では，1 つのファイルのすべてのバージョンで，大文字と小文字の区別が同じです。つまり，大文字と小文字の区別は，そのファイル名が最初に作成されたときのまま保存されます。

次の例では，DKA500 は ODS-5 ディスクです。

    $ SET DEFAULT DKA500:[TEST]
    $ SET PROCESS /PARSE_STYLE=EXTENDED
    $ CREATE myfile.txt
    [Ctrl/Z]
    $ CREATE MYFILE.TXT
    [Ctrl/Z]
    $ DIRECTORY

    Directory DKA500:[TEST]

    myfile.txt;2        myfile.txt;1

◆Extended File Specifications の大文字と小文字の区別の保存とその無視に注意する

ODS-5 ボリュームでは，ファイルが最初に入力されたときの大文字と小文字の区別が保存されますが，ファイルの検索は大文字と小文字を区別せずに実行されます。同様に，ユーザがコマンド・プロシージャの中で .EQS. や F$LOCATE などの DCL 文字関数を使用するときなどに比較を実行する場合にも，注意しなければなりません。

次の例は，DCL の中で大文字と小文字を区別しないファイル名のマッチングの重要さを示しています。このプログラムでは，大文字と小文字を区別するマッチングを実行する場合には引数を指定せず，大文字と小文字を区別しないマッチングを実行する場合には引数を指定することに注意してください。

このプログラムでは，F$SEARCH を使用して，".TXT" というファイル・タイプのすべてのファイルを見つけます。RMS (したがって F$SEARCH) は大文字と小文字を区別しないマッチングを実行するため，".txt" というファイル・タイプのファイルも見つけます。次に，F$SEARCH は F$LOCATE を使用して， "TEST" という名前を持つファイル名を検索します。F$LOCATE は大文字と小文字を区別するマッチングを実行するため，あらかじめ文字列を大文字に変換しておかないと，マッチングは失敗します。

    $ case_blind = 0
    $ if p1 .nes. "" then case_blind = 1 (1)
    $loop:
    $  file = f$search("*.TXT;") (2)
    $  if file .eqs. "" then goto not_found
    $  write sys$output "Search returns " + file
    $  if case_blind .eq. 1 then file = f$edit(file,"UPCASE") (3)
    $  if (f$locate("TEST",file) .ne. f$length(file)) then goto found (4)
    $  goto loop
    $found:
    $   write sys$output "Found a file matching TEST"
    $   exit
    $not_found:
    $   write sys$output "Did not find file matching TEST"
    $   exit

次に，この例の中で番号が付いている部分について説明します。

1. 引数 (大文字と小文字を区別しない比較演算を実行するよう，プログラムに要求する) がある場合には，"case_blind" を 1 に設定する。

2. 末尾が ".TXT" または ".txt" になっているファイルを取得する (F$SEARCH は大文字と小文字を区別しないため)。

3. 手順 1 で大文字と小文字を区別しない比較演算が選択された場合には，ファイル名を大文字に変更して，大文字と小文字を区別しない比較演算を実行する。

4. F$LOCATE は，ファイルを見つけると，"found:" に進む。

次の例では，検索プログラムは大文字と小文字を区別する検索を実行し，マッチするものを見つけていません。

    $ @test
    Search returns DKA300:[FISHER]test.txt;1
    Did not find file matching TEST

次の例では，検索プログラムは大文字と小文字を区別しない検索を実行し，マッチするものを見つけません。

    $ @test case-blind
    Search returns DKA300:[FISHER]test.txt;1

    Found a file matching TEST

◆CONDENSED スタイルのファイル名では短縮形と完全なディレクトリが別々に表示される

一部のシステムユーティリティおよび DIRECTORY のような DCL コマンドには，ファイル名を表示する方法を制御するスタイル・スイッチがあります。スタイルが CONDENSED の場合には，最長で 255 バイトのファイル名が表示される。ファイル指定が 255 バイトの上限に達すると，ディレクトリ名はディレクトリ ID (DID) に短縮される。

DIRECTORY コマンドは，DID の短縮形によるディレクトリ名を短縮されていないディレクトリ名と区別するため，短縮が行われると，それぞれのディレクトリ名に対して個別のヘッダを作成します。

    $ DIR/STYLE=CONDENSED

    Directory DKA300:[DEEPER.aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii._ten.aaaa.
    bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii._ten.aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.
    hhhh.iiii._ten.aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii._ten](1)

    aaaa.txt;1

    Total of 1 file.

    Directory DKA300:[528,7036,0](2)

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.txt;1

    Total of 1 file.

    Grand total of 2 directories, 2 files.(3)

1. CONDENSED スタイルでは，ディレクトリ名とファイル名の組み合わせが 255 バイトを超えない場合には，ディレクトリ名は DID に短縮されない。

2. CONDENSED スタイルでは，ディレクトリ名とファイル名の組み合わせが 255 バイトを超える場合には，ディレクトリ名は DID に短縮される。

3. 同じ 1 つのディレクトリに対して完全なディレクトリ形式と短縮形によるディレクトリ形式の両方を表示する DIRECTORY コマンドを実行すると，DIRECTORY はこれらを 2 つの異なるディレクトリとしてカウントする。

DIRECTORY コマンドの詳細については，『OpenVMS DCL ディクショナリ』を参照してください。

◆等価名としての Extended File Specifications に注意する

Extended File Specifications のエスケープ文字，サーカンフレックス (^) は，論理名の等価名文字列の中では使用されません。エスケープ文字を必要とする拡張ファイル名に対して論理名を定義するときには，DEFINE コマンドの中の拡張ファイル名にエスケープ文字を使用しないようにします。次に例を示します。

    $ define xxx a&b
    $ dir xxx

    Directory DKA500:[EXTENDED_FILES]

    a^&b.txt;1

    Total of 1 file.

# A.2 ODS-2 と ODS-5 の同時使用

この節では，クラスタ内での ODS-2 と ODS-5 の同時使用に関する注意事項について説明します。

◆ボリュームが混在している環境では従来型のファイル名を使用する

ODS-2 ボリュームと ODS-5 ボリュームの両方を使用している場合には，ODS-2 のファイル名と ODS-5 のファイル名の互換性の問題が発生することを避け，OpenVMS の以前のバージョンとの下位互換性を保つために， 従来型の ODS-2 のファイル名だけを使用します。

◆エラー・メッセージは解析スタイルによって異なることがある

ユーザに対して表示されるエラー・メッセージは，解析スタイルによって異なることがあります。解析スタイルが EXTENDED に設定されていると，以前は DCL レベルで検出されていた構文エラーが，RMS や XQP などのファイル・システムのレベルに渡されます。このため，ファイルの構文エラーに対してユーザが受け取るメッセージは，解析スタイルとボリューム構造によって多少異なることがあります。

次にさまざまなエラー・メッセージの例を示します。

- ODS-5 ボリューム上での TRADITIONAL スタイルと EXTENDED スタイルの例

      $ SHOW DEVICE DKA500:/FULL

        Disk AABOUT$DKA500:, device type RZ25, is online, allocated, deallocate
        on dismount, mounted, file-oriented device, shareable.

          Error count                    0    Operations completed 155
          .
          .
          .
        Volume Status:  ODS-5, (1) subject to mount verification, file high-water
        marking, write-back caching enabled.

      $ SET PROCESS /PARSE_STYLE=TRADITIONAL (2)
      $ OPEN /WRITE FILE z.z.z.z
      %DCL-W-PARMDEL, invalid parameter delimiter - check use of special
      characters \.Z\ (3)
      $ SET PROCESS /PARSE_STYLE=EXTENDED (4)
      $ OPEN /WRITE FILE z.z.z.z
      $ (5)

  1. ボリュームは ODS-5。

  2. 解析スタイルを TRADITIONAL に設定する。

  3. DCL は一部の ODS-5 ファイル名に対してこのようなエラーを返す。

  4. 解析スタイルを EXTENDED に設定する。

  5. DCL はファイルを作成する。

- ODS-2 ボリューム上での TRADITIONAL スタイルと EXTENDED スタイルの例

        Disk AABOUT$DKA200:, device type RZ25, is online, allocated, deallocate
        on dismount, mounted, file-oriented device, shareable.

          Error count                    0    Operations completed 232
          .
          .
          .

        Volume Status:  ODS-2, (1) subject to mount verification, file high-water
        marking, write-back caching enabled.

      $ SET PROCESS /PARSE_STYLE=TRADITIONAL (2)
      $ OPEN /WRITE FILE z.z.z.z
      %DCL-W-PARMDEL, invalid parameter delimiter - check use of special
      characters \.Z\ (3)
      $ SET PROCESS /PARSE_STYLE=EXTENDED (4)
      $ OPEN /WRITE FILE z.z.z.z
      %DCL-E-OPENIN, error opening
      -RMS-E-CRE, ACP file create failed (5)
      -SYSTEM-W-BADFILEVER, bad file version number

  1. ボリュームは ODS-2。

  2. 解析スタイルを TRADITIONAL に設定する。

  3. DCL はエラー・メッセージを返す。

  4. 解析スタイルを EXTENDED に設定する。

  5. DCL はこのファイル名を受け付けるが， XQP はエラーを返す。

- 同じ構文エラーに対するエラー・メッセージが異なる例

      $ SHOW DEVICE DKA500:/FULL

        Disk AABOUT$DKA500:, device type RZ25, is online, allocated, deallocate
        on dismount, mounted, file-oriented device, shareable.

          Error count                    0    Operations completed 155
          .
          .
          .
        Volume Status:  ODS-5, (1) subject to mount verification, file high-water
        marking, write-back caching enabled.

      $ SET PROCESS /PARSE_STYLE=TRADITIONAL (2)
      $ CREATE a^<b.c

      %DCL-W-PARMDEL, invalid parameter delimiter - check use of special
      characters
       \^\ (3)

      $ SET PROCESS /PARSE_STYLE=EXTENDED (4)
      $ CREATE a^<b.c

      %CREATE-E-OPENOUT, error opening a^<b.c as output
      -RMS-F-SYN, file specification syntax error (5)

  1. ボリュームは ODS-5。

  2. 解析スタイルを TRADITIONAL に設定する。

  3. DCL は構文エラーに対するエラー・メッセージを返す。

  4. 解析スタイルを EXTENDED に設定する。

  5. RMS は，同じ構文エラーに対して異なるエラー・メッセージを返す ("<" は，拡張ファイル名では使用できない)。

◆暗黙のファイル名出力に注意する

処理されるファイルを基にユーティリティが出力ファイルを作成できるようにする場合には，省略時の値に注意が必要です。誤って ODS-2 ボリュームに拡張ファイル名を格納しようとすることがないように，ファイルが格納される場所を確認する必要があります。

次に，予想しなかった場所にファイルが格納される例をいくつか示します。

- アプリケーションまたはユーティリティが ODS-5 の拡張ファイル名を ODS-2 (DKA200:) ボリュームに書き込もうとすると，次の例のようにエラーが発生する。

    $ SHOW DEFAULT
      DKA200:[DOREO]
    $ DUMP /OUTPUT DKA500:[DOREO]This^_is^_a^_file.Dat
    %DUMP-E-OPENOUT, error opening DKA200:[DOREO]THIS^_IS^_A^_FILE.DMP;as
    output
    -RMS-E-CRE, ACP file create failed
    -SYSTEM-W-BADFILENAME, bad file name syntax

/OUTPUT 修飾子を使用して指定した出力ファイルは，省略時の設定では，入力ファイルと同じ名前でファイル・タイプが .DMP になり省略時のディレクトリ内に生成されます。入力ファイル指定は ODS-5 ボリューム上の拡張名ですが，.DMP ファイルは ODS-2 ボリュームに書き込まれるため，従来型の名前でなければなりません。このため，エラーが発生します。

- 次の条件のすべてが該当すると，バッチ・コマンド・ファイルの実行は失敗する。

  - ログ・ファイルが暗黙にまたは明示的に要求された。

  - 暗黙のまたは明示的なログ・ファイル指定に拡張ファイル名が含まれている (つまり，このログ・ファイルの名前は ODS-2 に準拠していない)。

  - ログ・ファイルが ODS-2 ボリューム上に作成された。

  このような場合，ログ・ファイルを作成できないため，バッチ・コマンド・ファイルの実行は失敗します。このような状況は，論理名 SYS$LOGIN が ODS-2 ボリュームを参照したときに最も多く発生します。これは，ログ・ファイルが SYS$LOGIN デバイス上で暗黙に作成されるためです。さらに，通知が無効になっていると，バッチ・ジョブが実行されなかったことが通知されません。
  このようなエラーを防ぐには，拡張ファイル名を持つコマンド・ファイルを実行するときには，/LOG= 修飾子および ODS-2 準拠のログ・ファイル指定を使用するようにします。

前へ | 次へ | 目次 | 索引