前へ | 次へ | 目次 | 索引 |
この節では,システム・アーキテクチャに関する Extended File Specifications の注意事項について説明します。
VAX システムで ODS-5 ボリュームをマウントすることはできますが,VAX システムにログインしても,拡張ファイル名を表示することができません。その代わりに,疑似名が表示されます。
次の例は,同じディレクトリ名が Alpha システムと VAX システムとで表示される場合の違いを示しています。
$ DIRECTORY DPA100:[TEST] Directory DPA100:[TEST] Accounting^_data.lis;1 atest.txt;1 |
$ DIRECTORY DPA200:[TEST] Directory DPA200:[TEST] \PISO_LATIN\.??? ATEST.TXT |
さらに,VAX システムでのディレクトリの深さは,8 (最上位論理名を使用した場合には 16) に制限されます。
A.4 制限事項
この節では,拡張ファイル名を使用する場合の制限事項について説明します。
Compaq C Run Time Library (CRTL) を使用することにより,プログラマは,creat() や fopen() などのルーチンに対して,UNIX スタイルと VMS スタイルの両方のファイル指定を実行することができます。
UNIX のファイル指定では,最初の文字がチルダ (~) になっているパス名は,ユーザのホーム・ディレクトリを表します。一方,OpenVMS の拡張ファイル名では,チルダはファイル名またはディレクトリ名のどの位置にあっても有効です。
下位互換性を保つために,CRTL では,引き続きファイル名やディレクトリ名の先頭にあるチルダ (~) をユーザのホーム・ディレクトリを表します。先頭がチルダ (~) になっている OpenVMS ファイル名を,UNIX スタイルのファイル指定を受け付ける CRTL ルーチンに渡すには,^~ のように,チルダの前にエスケープ文字としてサーカンフレックス (^) を付けます。
次の Compaq CRTL 関数は OpenVMS の拡張ファイル名を受け付けますが,ファイル指定の中で先頭にチルダ (~) がある場合にはこの構文が必要になります。
.create
.fopen
.freopen
.open
.stat
この付録では,本書の他の章で登場した技術情報を,まとめて示しています。
B.1 システム・サービスの変更点
この節では,以下のシステム・サービスについて説明します。
B.1.1 $SET_PROCESS_PROPERTIESW システム・サービス (Alpha システムのみ)
$SET_PROCESS_PROPERTIESW システム・サービスは,プロセスに関連付けられる単純な値を設定します。
$SET_PROCESS_PROPERTIESW mbz1 ,mbz2 ,mbz3 ,property ,value, prev_value
int sys$set_process_properties( unsigned int mbz1, unsigned int mbz2, unsigned int mbz3, unsigned int property, unsigned __int64 value, unsigned __int64 *prev_value); |
mbz1,mbz2,mbz3 |
Compaq で将来使用するために予約されています。 0 が指定されていなければなりません。
property OpenVMS usage: integer type: longword (unsigned) access: read only mechanism: by value |
設定するプロパティを選択する定数。
プロパティの有効な値は,$PPROPDEF マクロによって 表 B-1 のように定義されています。
プロパティ・コード | 説明 |
---|---|
PPROP$C_PARSE_STYLE_TEMP: | 使用するコマンド解析のタイプ。この値は,イメージの存在期間に限って設定される。イメージが存在しなくなると,この値は恒久的なスタイルに戻る。有効な値は,PARSE_STYLE$C_TRADITIONAL および PARSE_STYLE$C_EXTENDED。 |
PPROP$C_PARSE_STYLE_PERM: | 使用するコマンド解析のタイプ。この値は,スタイルが再び設定されない限り,プロセスの存在期間中は有効である。有効な値は,PARSE_STYLE$C_TRADITIONAL および PARSE_STYLE$C_EXTENDED。 |
value OpenVMS usage: integer type: quadword (unsigned) access: read mechanism: by value |
プロパティを設定するためのクォドワード値。
prev_value OpenVMS usage: access_mode type: quadword (unsigned) address of a quadword value access: write mechanism: by reference |
プロパティの以前の値を受け取るクォドワードのアドレス。
なし。
なし。
$GETJPI
SS$NORMAL The service completed successfully. SS$ACCVIO Access violation. |
B.1.2 $CVT_FILENAME システム・サービス (Alpha システムのみ)
文字列を,RMS 形式からファイル・システム (ACP-QIO) 形式に,またはファイル・システム (ACP-QIO) 形式から RMS 形式に変換します。
SYS$CVT_FILENAME cvttyp ,srcstr ,inflags ,outbuf ,outlen ,outflags
int sys$cvt_filename (unsigned int cvttyp, void *srcstr, unsigned int inflags, void *outbuf, unsigned short int *outlen, unsigned int *outflags); |
cvttyp OpenVMS usage: unsigned_longword type: longword (unsigned) access: read only mechanism: by value |
RMS 形式から ACP-QIO 形式への変換を行うのか,またはその逆を行うのかを示すロングワード値。
このパラメータで有効な値は,シンボル CVTFNM$C_ACPQIO_TO_RMS および CVTFNM$C_RMS_TO_ACPQIO で表される 2 つです。これらのシンボルは,$CVTFNMDEF マクロによって定義されます。
srcstr OpenVMS usage: string of bytes or words type: string of bytes or words access: read only mechanism: by 32-bit descriptor--fixed length string descriptor |
このサービスによって変換される文字列。
RMS 形式から ACP-QIO 形式への変換を行う場合, srcstr は ISO Latin-1 文字列または VTF-7 でエンコードされた文字列です。 ACP-QIO 形式から RMS 形式への変換を行う場合, srcstr はバイト幅またはワード幅の文字から成る文字列です。
記述子長フィールドは,入力文字列がバイト幅とワード幅のどちらであっても,その入力文字列の長さをバイト数で表します。
srcstr 引数は,この文字列をポイントする記述子の 32 ビット・アドレスです。
inflags OpenVMS usage: mask_longword type: longword (unsigned) access: read only mechanism: by value |
入力文字列の特性を示すロングワードのフラグ・マスク。
RMS 形式から ACP-QIO 形式に変換する場合, CVTFNM$V_NO_DELIMITERS フラグだけが有効です。
ACP-QIO 形式から RMS 形式に変換する場合,有効なフラグは CVTFNM$V_WORD_CHARS および CVTFNM$V_NO_DELIMITERS ($CVTFNMDEF マクロによって定義される) です。フラグの説明は 表 B-2 を参照してください。
フラグ | 説明 |
---|---|
CVTFNM$V_WORD_CHARS | 入力ソース文字列には,ワード幅の UCS-2 文字が含まれている (ACPQIO_TO_RMS)。 |
CVTFNM$V_NO_DELIMITERS | 入力ソース文字列は,タイプ区切り文字やバージョン区切り文字としてピリオドやセミコロンが含まれている (または含まれていなければならない) ファイル名として扱うのではなく,任意の文字列 (サブディレクトリなど) として扱わなければならない。 |
outbuf OpenVMS usage: string of bytes or words type: string of bytes or words access: write only mechanism: by 32-bit descriptor--fixed-length string descriptor |
変換された文字列が書き込まれるバッファ。
RMS 形式から ACP-QIO 形式に変換を行う場合,ソース文字列に含まれている文字によっては,文字列を,バイト幅の ISO Latin-1 文字またはワード幅の UCS-2 文字から構成することができます (ソース文字列内のいずれかの文字で表現するために 1 ワードを必要とする場合には,その出力バッファ内のすべての文字はワード幅になります)。
ACP-QIO 形式から RMS 形式に変換を行う場合,出力文字は, RMS の正規表現の ISO Latin-1 および VTF-7 文字から構成されています ( 『Guide to OpenVMS File Applications』を参照してください)。
ACPQIO_TO_RMS 変換の場合,出力文字列がワード幅文字から構成されている場合には, outflags フラグ・マスク内の CVTFNM$V_WORD_CHARS フラグが設定されます。
outbuf 引数は,呼び出し元のモードで書き込み可能なバッファをポイントする 32 ビット・アドレスです。
outlen OpenVMS usage: word_unsigned type: word (unsigned) access: write only mechanism: by 32-bit reference |
outlen 引数は,呼び出し元のモードで書き込み可能な (16 ビットの) ワードの 32 ビット・アドレスです。
outflags OpenVMS usage: mask_longword type: longword (unsigned) access: write only mechanism: by 32-bit reference |
出力文字列の特性を示すために,サービスが設定したりクリアするロングワードのフラグ・マスクです。
RMS_TO_ACPQIO 変換で,変換された文字列内の文字が (1 バイト幅ではなく) 1 ワード幅の場合, SYS$CVT_FILENAME は,CVTFNM$V_WORD_CHARS ($CVTFNMDEF マクロによって定義されます) に対応するビットを設定します。変換された文字列内の文字が 1 バイト幅の場合,サービスは CVTFNM$V_WORD_CHARS ビットをクリアします。他のすべてのビットは,RMS_TO_ACPQIO 変換によってクリアされます。
outflags 引数は,呼び出し元のモードで書き込み可能な 32 ビットのフラグ・マスクの 32 ビット・アドレスです。
このサービスは,ファイル名 (1) またはサブディレクトリ名 (2) を RMS 形式 (RMS インタフェース上で表示される) と ACP-QIO 形式 (ディスク上に保存される) との間で変換することを目的としています。バージョン 7.2 以前では,これらの形式の表現は同じでしたが,拡張 (ODS-5) ファイル名では,必ずしも同じとは限りません (ODS-5 ファイル指定の詳細については,『Guide to OpenVMS File Applications』を参照してください)。
cvttyp の値に応じて,このサービスは RMS 形式から ACP-QIO 形式へ,または ACP-QIO 形式から RMS 形式へ,文字列の変換を行います。
ソース文字列は srcstr 引数によって記述され,出力バッファは outbuf 引数によって記述され,結果の文字列の長さは outlen 引数に書き込まれます。
ソース文字列のいずれかが出力バッファのアドレス範囲と重なる場合,出力文字列は予測不可能な値になります。
RMS から ACPQIO への変換:
srcstr 記述子引数によって記述される文字列が,ISO Latin-1 または UCS-2 文字列に変換されます。このとき,個々の文字は,$QIO サービスを経由して ACP-QIO に渡すことができる形式で表現されます。
CVTFNM$V_NO_DELIMITERS 入力フラグがクリアされている場合,ソース文字列はスキャンされ,必要に応じて,$PARSE が省略時の名前,タイプ,およびバージョン・フィールドの指定なしに実行された場合と同じように,ピリオドおよびセミコロンが挿入または追加されます。スキャンによって名前 (FID なし),タイプ,またはバージョン以外のフィールドがあることを示す区切り文字を検出した場合,構文エラーが返されます。
CVTFNM$V_NO_DELIMITERS 入力フラグが設定されている場合,個々の文字が評価され,ディスク上の形式に変換されます。ただし,タイプおよびバージョンの区切り文字があるかどうかを判断するためのスキャンは行われず,区切り文字の追加も行われません。
エスケープ文字のサーカンフレックス (^) が前に付いていないパーセント記号 (%) は,疑問符に変換されます。サーカンフレックス (^) が前に付いている ISO Latin-1 文字は,対応する ISO Latin-1 文字に変換されます。 サーカンフレックス (^) が前に付いている VTF-7 文字 (^U1234 など) は, UCS-2 文字 (0x1234 など) に変換されます。
いずれかの文字で UCS-2 (ワード幅の文字) による表現が必要な場合,出力文字列中のすべての文字は UCS-2 で表現されます。どの文字でもワード幅の文字による表現が必要でない場合,出力文字列中のすべての文字は ISO Latin-1 (バイト幅) 文字で表現されます。
使用できる文字は,RMS ファイル名 (ファイル名,ファイル・タイプ,ファイル・バージョン) または RMS サブディレクトリ名の中で有効な文字です。たとえば,ディレクトリ区切り文字 "[" および "]" は,サーカンフレックス (^) が前に付いている場合を除いて無効です。
ACPQIO から RMS への変換:
srcstr 記述子引数によって記述される文字列が,その文字列の RMS 正規表現に変換されます。
CVTFNM$V_NO_DELIMITERS 入力フラグがクリアされている場合,ソース文字列には少なくとも 1 つのセミコロンが含まれていなければならず,さらにそのセミコロンの左側には少なくとも 1 つのピリオドが含まれていなければなりません。このようになっていない場合,RMS$_SYN (構文エラー) が返されます。出力文字列では,これらの 2 つの場合を除くすべてのピリオドおよびセミコロンの前には,RMS のエスケープ文字 (^) が付きます。
CVTFNM$V_NO_DELIMITERS 入力フラグが設定されている場合,出力文字列内のすべてのピリオドまたはセミコロンの前には, RMS のエスケープ文字 (^) が付きます。
inflags 引数の CVTFNM$V_WORD_CHARS フラグは,入力文字列にバイト幅 (ISO Latin-1) 文字またはワード幅 (UCS-2) 文字のどちらが含まれているように解釈するかを示します。この引数によってワード幅が含まれていることが示されているにもかかわらず入力の長さの値が奇数になっている場合には,構文エラーが返されます。
疑問符はパーセント記号に変換され,パーセント記号の前にはサーカンフレックス (^) が付きます。 UCS-2 文字は, VTF-7 文字に変換されます。すべての文字は,RMS 正規表現で表現されます。
なし。
なし。
なし。
SS$NORMAL The service completed successfully. SS$_BADPARAM Unrecognized conversion type, extraneous input flags set, or zero-length input string. SS$_INSFARG Not enough arguments provided. SS$_TOO_MANY_ARGS Too many arguments provided. RMS$_SYN The service could not translate one or more characters in the strings described by the srcstr argument, the input string has word-width characters but odd byte-length (ACPQIO_TO_RMS only), or the CVTFNM$V_NO_DELIMITERS input flag was clear and the input string did not contain both type and version delimiters. SS$_BUFFEROVF The output buffer was not large enough to accommodate the converted string. |
このシステム・サービスには,以下に示す 2 つの新しい項目コードがあります。
JPI$_PARSE_STYLE_PERM
JPI$_PARSE_STYLE_IMAGE
これらの項目コードにより,$SET_PROCESS_PROPERTIES で設定された値 PARSE_STYLE$C_TRADITIONAL または PARSE_STYLE$C_EXTENDED が返されます。戻り値の長さはそれぞれ 1 バイトです。
前へ | 次へ | 目次 | 索引 |