HP OpenVMS
HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (上巻)
DECC$EFS_CASE_PRESERVE を無効に設定すると, UNIX 形式のファイル名は常に小文字で報告されます。
しかし,DECC$EFS_CASE_SPECIAL を有効に設定すると, DECC$EFS_CASE_PRESERVE の設定は無効になります。
DECC$EFS_CASE_SPECIAL
DECC$EFS_CASE_SPECIAL を有効に設定すると,小文字を含むファイル名の場合にだけ,大文字と小文字の区別が保持されます。ファイル名の要素がすべて大文字の場合は, UNIX 形式ではすべて小文字で報告されます。
DECC$EFS_CASE_SPECIAL を有効に設定すると,この設定は DECC$EFS_CASE_PRESERVE の値より優先します。
DECC$EFS_CHARSET
DECC$EFS_CHARSET を有効に設定すると, UNIX の名前で ODS-5 拡張文字を使用できます。次の文字を除き,複数のドットと 0〜255 の範囲のすべての ASCII 文字がサポートされます。
DECC$FILENAME_UNIX_ONLY が有効に設定されていない限り,一部の文字はコンテキストに応じて OpenVMS の文字として解釈されることがあります。このような文字は次のとおりです。
ファイル名に関して特定の文字が存在するものと仮定している既存のアプリケーションでは,EFS 拡張文字セットのサポートを有効に設定すると,非標準でドキュメントに記載されていない次の C RTL 拡張機能が動作しないため,DECC$EFS_CHARSET が必要になることがあります。
- $HOME はユーザのログイン・ディレクトリとして解釈されます。
DECC$EFS_CHARSET を有効に設定すると,$HOME はリテラルとして取り扱われるため, OpenVMS または UNIX 形式のファイル名でこの文字を使用できます。
-
~nameは,ユーザ
nameのログイン・ディレクトリとして解釈されます。
DECC$EFS_CHARSET を有効に設定すると,
~nameはリテラルとして取り扱われるため, OpenVMS または UNIX 形式のファイル名でこの文字を使用できます。
-
[a-z]という形式のワイルド・カード正規表現。
DECC$EFS_CHARSET を有効に設定すると, OpenVMS および UNIX 形式のファイル名で角括弧を使用できます。たとえば,
openなどの関数では,
abc[a-z]ef.txtは, OpenVMS 形式の
abc^[a-z^]ef.txtという名前に等しい UNIX 形式の名前として解釈され,
[a-z]bcは UNIX 形式の
/sys$disk/a-z/bcという名前に等しい OpenVMS 形式の名前として解釈されます。
DECC$EFS_CHARSET を有効に設定すると, OpenVMS 形式のファイル名を UNIX 形式のファイル名に変換するときに, EFS 拡張文字の次のエンコーディングがサポートされます。
- すべての ODS-2 互換名。
- シングル・バイト文字または
^abという形式の 2 桁の 16 進数を使用した 8 ビット文字のすべてのエンコード。 UNIX パスでは,これらは常にシングル・バイトとして表現されます。
- DEL のエンコード (^7F)。
- カレットの後に続く次の文字。
space ! , _ & ' ( ) + @ { } ; # [ ] % ^ = $ - ~ .
|
- カレットが付いていない次の文字。
- 実装では,関数
readdir,
ftw,
getname,
fgetname,
getcwdなどに対して, OpenVMS から UNIX への必要な変換がサポートされます。
DECC$EFS_FILE_TIMESTAMPS
DECC$EFS_FILE_TIMESTAMPS を有効に設定すると,
statと
fstatは, SET VOLUME/VOLUME=ACCESS_DATES を使用して拡張ファイル時刻が有効に設定されている ODS-5 ボリュームのファイルに対して,新しい ODS-5 アクセス時刻 (
st_atime),属性改訂時刻 (
st_ctime),および変更時刻 (
st_mtime) を報告します。
DECC$EFS_FILE_TIMESTAMPS が無効に設定されているか,ボリュームが ODS-5 でない場合,あるいは有効に設定されたこれらの追加時刻がボリュームでサポートされない場合,
st_ctimeはファイルの作成時刻になり,
st_atimeは
st_mtimeと同じになります。
関数
utimeと
utimesはこれらの ODS-5 の時刻を
statと同じ方法でサポートします。
DECC$EFS_NO_DOTS_IN_DIRNAME
ODS-5 のファイル名での拡張文字のサポートにより, NAME.EXT などの名前は,NAME.EXT.DIR と解釈できます。 UNIX ファイル名の拡張文字サポートが有効の場合, [.name^.ext] というディレクトリが存在するかどうかを調べるために, UNIX 名の変換でオーバヘッドが発生します。
DECC$EFS_NO_DOTS_IN_DIRNAME 機能論理名を有効にすると,ドットを含むファイル名をディレクトリ名として解釈しなくなります。この論理名を有効にすると,NAME.EXT はファイル名と見なされ,ディレクトリ [.name^.ext] はチェックされません。
DECC$ENABLE_GETENV_CACHE
C RTL では,
environテーブルにある環境変数の一覧の他に,プロセスで使用できるすべての論理名と DCL シンボルも使用されます。
デフォルトでは,
environテーブルにない名前に対して
getenvが呼び出されると,この名前を論理名として解決しようとします。解決できない場合は,DCL シンボルとして解決しようとします。
DECC$ENABLE_GETENV_CACHE を有効に設定すると,論理名または DCL 名が正しく変換された後,その値はキャッシュに格納されます。同じ名前が
getenvの将来の呼び出しで要求された場合は,論理名や DCL シンボルを再評価するのではなく,キャッシュにある値が返されます。
DECC$ENABLE_TO_VMS_LOGNAME_CACHE
UNIX 名変換の性能を改善するには, DECC$ENABLE_TO_VMS_LOGNAME_CACHE を使用します。この値は,各キャッシュ・エントリの存続時間 (秒) です。等価文字列 ENABLE は,1 秒と見なされます。
各エントリの存続時間を 1 秒としてキャッシュを有効にするには, DECC$ENABLE_TO_VMS_LOGNAME_CACHE に 1 を定義します。
各エントリの存続時間を 2 秒としてキャッシュを有効にするには, DECC$ENABLE_TO_VMS_LOGNAME_CACHE に 2 を定義します。
キャッシュ・エントリの有効期限なしでキャッシュを有効にするには, DECC$ENABLE_TO_VMS_LOGNAME_CACHE に - 1 を定義します。
DECC$EXEC_FILEATTR_INHERITANCE
DECC$EXEC_FILEATTR_INHERITANCE 機能論理名は, C プログラムの子プロセスに影響します。
V7.3-2 より前の OpenVMS では, DECC$EXEC_FILEATTR_INHERITANCE は,有効か無効のどちらかです。
- DECC$EXEC_FILEATTR_INHERITANCE が有効の場合,現在のファイル・ポインタとファイル・オープン・モードが,
exec呼び出しで子プロセスに渡されます。
- この論理名が無効の場合,子プロセスは追加モードやファイル・ポインタを継承しません。
V7.3-2 およびそれ以降の OpenVMS では, DECC$EXEC_FILEATTR_INHERITANCE に 1 または 2 を定義するか,無効にすることができます。
- DECC$EXEC_FILEATTR_INHERITANCE に 1 を定義すると,子プロセスは,追加モード以外のすべてのファイル・アクセス・モードについてファイル位置を継承します。
- DECC$EXEC_FILEATTR_INHERITANCE に 2 を定義すると,子プロセスは,追加モードも含め,すべてのファイル・アクセス・モードについてファイル位置を継承します。
- DECC$EXEC_FILEATTR_INHERITANCE が無効の場合,子プロセスはいずれのアクセス・モードについてもファイル位置を継承しません。
DECC$FILENAME_UNIX_ONLY
DECC$FILENAME_UNIX_ONLY を有効に設定すると,ファイル名は OpenVMS 形式の名前として解釈されません。このため,以下の文字が OpenVMS の特殊文字として解釈されるのを防止できます。
DECC$FILENAME_UNIX_NO_VERSION
DECC$FILENAME_UNIX_NO_VERSION を有効に設定すると, UNIX 形式のファイル名で OpenVMS のバージョン番号はサポートされません。
DECC$FILENAME_UNIX_NO_VERSION を無効に設定すると, UNIX 形式の名前でバージョン番号を報告するときに,その前にピリオド (.) が付加されます。
DECC$FILENAME_UNIX_REPORT
DECC$FILENAME_UNIX_REPORT を有効に設定すると,呼び出し元が特に OpenVMS 形式を選択しない限り,ファイル名はすべて UNIX 形式で報告されます。これは
getpwnam,
getpwuid,
argv[0],
getname,
fgetname,
tempnamに適用されます。
DECC$FILENAME_UNIX_REPORT を無効に設定すると,関数呼び出しで指定しない限り,ファイル名は OpenVMS 形式で報告されます。
DECC$FILE_PERMISSION_UNIX
DECC$FILE_PERMISSION_UNIX を有効に設定すると,新しいファイルとディレクトリのファイル・アクセス許可は,ファイルの作成モードおよび
umaskに従って設定されます。これにはモード 0777 も含まれます。ファイルの以前のバージョンが存在する場合は,新しいファイルのファイル・アクセス許可は古いバージョンから継承されます。 WRITE アクセス許可が有効に設定されていると,このモードは新しいディレクトリに対して DELETE アクセス許可を設定します。
DECC$FILE_PERMISSION_UNIX を無効に設定すると,モード 0 およびモード 0777 は RMS のデフォルト保護またはファイルの前のバージョンの保護を使用することを示します。また,新しいディレクトリのアクセス許可は, DELETE アクセス許可の無効化も含めて,OpenVMS の規則に従います。
DECC$FILE_SHARING
DECC$FILE_SHARING を有効に設定すると,すべてのファイルは完全な共用を有効にした状態でオープンされます (FAB$M_DEL | FAB$M_GET | FAB$M_PUT | FAB$M_UPD)。これは,呼び出し元が指定した共用モードとの論理和 (OR) として指定されます。
DECC$FIXED_LENGTH_SEEK_TO_EOF
DECC$FIXED_LENGTH_SEEK_TO_EOF を有効に設定すると,
direction パラメータが SEEK_END に設定された
lseek,
fseeko,
fseekは,固定長レコードのファイル内の最後のバイトを基準に位置を設定します。
DECC$FIXED_LENGTH_SEEK_TO_EOF を無効に設定すると,固定長レコードのファイルに対して SEEK_EOF を設定して呼び出した場合,
lseek,
fseek,
fseekoはファイル内の最後のレコードの末尾を基準にして位置を設定します。
DECC$GLOB_UNIX_STYLE
DECC$GLOB_UNIX_STYLE を有効にすると,
glob関数の UNIX モードが選択され, OpenVMS スタイルのファイル名やワイルドカードの代わりに, UNIX スタイルのファイル名やワイルドカードが使用されます。
DECC$LOCALE_CACHE_SIZE
DECC$LOCALE_CACHE_SIZE は,ロケール・データをキャッシュに格納するために割り振るメモリ容量をバイト数で定義します。デフォルト値は 0 であり,その場合はロケール・キャッシュは無効になります。
デフォルト値: 0
最大値: 2147483647
DECC$MAILBOX_CTX_STM
デフォルト設定では,パイプではないローカル・メールボックスに対する
openは, FAB$M_CR というレコード属性を持つものとして,メールボックス・レコードを取り扱います。
DECC$MAILBOX_CTX_STM を有効に設定すると,レコード属性 FAB$M_CR は設定されません。
DECC$NO_ROOTED_SEARCH_LISTS
decc$to_vms関数は,UNIX 形式のパス文字列を評価する際に,論理名となる 1 番目の要素を検出すると,次の処理を行います。
- 最上位の論理名またはデバイスの場合は,論理名に ":[000000]" を付加します。
たとえば,
log1が最上位の論理名 ($DEFINE LOG1 [DIR_NAME.]) の場合,
/log1/filename.extは LOG1:[000000]FILENAME.EXT に変換されます。
- 最上位でない論理名の場合は,論理名にコロン (:) だけを付加します。
たとえば,
log2が最上位でない論理名 ($ DEFINE LOG2 [DIR_NAME]) の場合,
/log2/filename.extは LOG2:FILENAME.EXT に変換されます。
- 1 番目の要素が検索リスト論理名の場合,変換は,検索リスト内の 1 番目の要素を評価して,以前に説明したようにパスを変換することにより進められます。
上記の 3 つのケースでは,予想可能な,期待どおりの結果が得られます。
1 番目の要素が,最上位の論理名と最上位でない論理名が混在した検索リストの場合,以前の説明のとおりにパスを変換すると,古いバージョン (7.3-1 よりも前) の OpenVMS とは異なる動作になることがあります。
- OpenVMS Version 7.3-1 より前の場合,論理名の内容とは関係なく,
decc$to_vms関数はコロン (:) だけを付加していました。最上位の論理名と最上位でない論理名が混在した検索リストの場合,期待どおりの結果が得られます。
- OpenVMS Version 7.3-1 およびそれ以降では,混在している検索リストの 1 番目の要素が最上位の論理名の場合,
decc$to_vmsが論理名に ":[000000]" を付加します。その結果,OpenVMS Version 7.3-1 より前のリリースとは,異なる動作になります。
DECC$NO_ROOTED_SEARCH_LISTS は,
decc$to_vms関数が検索リスト論理名を解決する方法を制御します。また,OpenVMS の動作を V7.3-1 より前の状態に戻すこともできます。
DECC$NO_ROOTED_SEARCH_LISTS を有効にすると,次のようになります。
- 論理名がファイル指定内で検出され,検索リストだった場合, OpenVMS ファイル指定を作成するときに,コロン (:) が付加されます。
- 論理名が検索リストでない場合,動作は, DECC$NO_ROOTED_SEARCH_LISTS が無効の場合と同じです。
この機能論理名を有効にすると,検索リスト論理名の動作が,7.3-1 以前の状態になります。
DECC$NO_ROOTED_SEARCH_LISTS を無効にすると,次のようになります。
- ファイル指定内で論理名が検出され,最上位の論理名 (つまり,1 番目の要素が最上位論理名である検索リスト) だった場合, OpenVMS ファイル指定の作成時に,":[000000]" が付加されます。
- 最上位でない論理名の場合 (つまり,1 番目の要素が最上位でない論理名である検索リストの場合) は,コロン (:) だけが追加されます。
この機能論理名を無効にすると, OpenVMS Version 7.3-1 およびそれ以降の動作になります。
DECC$PIPE_BUFFER_SIZE
パイプ書き込み操作の場合, 512 バイトというシステムのデフォルト・バッファ・サイズでは, 512 バイトより長いメッセージを取り扱うときに,性能が低下し,余分なライン・フィードが生成される可能性があります。
DECC$PIPE_BUFFER_SIZE を指定すると,
pipeや
popenなどのパイプ関数に対して,大きなバッファ・サイズを使用できます。 512〜65535 バイトまでの値を指定できます。
DECC$PIPE_BUFFER_SIZE を指定しないと,デフォルト・バッファ・サイズである 512 が使用されます。
デフォルト値: 512
最小値: 512
最大値: 65024
DECC$PIPE_BUFFER_QUOTA
OpenVMS Version 7.3-2 では,パイプのメールボックスのバッファ・クォータを指定する,
int型の第 4 引数 (オプション) が,
pipe関数に追加されました。以前のバージョンの OpenVMS では,バッファ・クォータはバッファ・サイズと同じでした。
DECC$PIPE_BUFFER_QUOTA を使用すると,この関数のオプションの第 4 引数を省略した場合に,
pipe関数が使用するバッファ・クォータを指定できます。
pipeのオプションの第 4 引数を省略し, DECC$PIPE_BUFFER_QUOTA も定義していない場合,バッファ・クォータは,デフォルトで,以前と同じようにバッファ・サイズになります。
デフォルト値: 512
最小値: 512
最大値: 2147483647
DECC$POPEN_NO_CRLF_REC_ATTR
DECC$POPEN_NO_CRLF_REC_ATTR を無効に設定すると,
popen関数を使用してオープンしたパイプのレコード属性には,CR/LF キャリッジ制御 (fab$b_rat |= FAB$M_CR) が設定されます。これがデフォルトの動作です。
DECC$POPEN_NO_CRLF_REC_ATTR を有効に設定すると, CR/LF キャリッジ制御がパイプ・レコードに追加されません。これは,UNIX の動作と互換性がありますが,この機能を有効にすると,キャリッジ・リターン文字に依存している
getsのようなほかの関数で望ましくない動作になる可能性があります。
DECC$POSIX_COMPLIANT_PATHNAMES
DECC$POSIX_COMPLIANT_PATHNAMES を有効に設定すると,アプリケーションから C RTL 関数に渡すパス名を POSIX 準拠のパス名にすることができます。
DECC$POSIX_COMPLIANT_PATHNAMES は特に指定しない限り無効になっていて,通常の C RTL 動作が優先されます。この無効になる動作の中には UNIX 仕様のパス名を解釈する方法も含まれていて, POSIX 準拠のパス名処理とは無関係な,異なる規則が使用されます。
DECC$POSIX_COMPLIANT_PATHNAMES を有効にするには,この機能論理名の値として,次のいずれかの値を設定します。
| 1
|
パス名をすべて,POSIX のスタイルで表す。
|
| 2
|
"
:
" で終わっているかまたは任意のかっこ "
[]<>
" を含んでいて,しかも SYS$FILESCAN サービスで解析可能なパス名は,そのすべてを OpenVMS のスタイルで表し,それ以外のパス名は,POSIX のスタイルで表す。
|
| 3
|
"
/
" を含むパス名と,パス名 "
.
" および "
..
" は POSIX のスタイルで表し,それ以外のパス名は,OpenVMS のスタイルで表す。
|
| 4
|
パス名をすべて,OpenVMS のスタイルで表す。
|
詳細は, 第 12.3.1 項 を参照してください。
DECC$POSIX_SEEK_STREAM_FILE
DECC$POSIX_SEEK_STREAM_FILE を有効に設定すると, STREAM ファイルでファイルの終端 (EOF) を超えた位置設定を行った場合,次の書き込みまでファイルへの書き込みが行われません。書き込みが現在のファイルの終端を超える場合,古いファイルの終端を超えた位置から書き込みの先頭までの位置に 0 が埋め込まれます。
DECC$POSIX_SEEK_STREAM_FILE を無効に設定すると,ファイルの終端を超える位置設定を行った場合,現在のファイルの終端から新しい位置までの間に 0 がただちに書き込まれます。
DECC$POSIX_STYLE_UID
DECC$POSIX_STYLE_UID が有効の場合,32 ビットの UID と GID は, POSIX 形式の識別子として解釈されます。
この論理名が無効の場合,UID と GID はプロセスの UIC から得られます。
この機能は, POSIX 形式の UID と GID をサポートしている OpenVMS システムでのみ利用できます。
DECC$READDIR_DROPDOTNOTYPE
DECC$READDIR_DROPDOTNOTYPE を有効に設定すると,
readdirは UNIX 形式でファイル名を報告するときに,ファイル名にピリオド (.) が含まれている場合,ファイル・タイプのないファイルに対して末尾のピリオドだけを報告します。
この論理名を無効に設定すると,ファイル・タイプのないすべてのファイル名の末尾にピリオドが付加されて報告されます。
DECC$READDIR_KEEPDOTDIR
readdirから UNIX 形式のファイルを報告する場合,デフォルト動作では,ファイル・タイプを付けずにディレクトリだけが報告されます。
DECC$READDIR_KEEPDOTDIR を有効に設定すると,ディレクトリは UNIX 形式でファイル・タイプ ".DIR" を付けて報告されます。
DECC$RENAME_NO_INHERIT
DECC$RENAME_NO_INHERIT は,
rename関数で,より UNIX に準拠した動作を提供します。 DECC$RENAME_NO_INHERIT が有効な場合は,次のような動作を強要します。
- 古い引数がファイルのパス名を指す場合,新しい引数がディレクトリのパス名を指すことはありません。
- 新しい引数で既存のディレクトリを指定することはできません。
- 古い引数がディレクトリのパス名を指す場合,新しい引数がファイルのパス名を指すことはありません。
- ファイルの新しい名前は古い名前から何も継承しません。新しい名前は完全に指定する必要があります。次に例を示します。
"A.A" の名前を "B" に変更すると,"B" になります。
この論理名が無効の場合,OpenVMS で期待されている動作になります。例を次に示します。
"A.A" の名前を "B" に変更すると,"B.A" になります。
DECC$RENAME_ALLOW_DIR
DECC$RENAME_ALLOW_DIR を有効にすると,
rename関数の動作が以前の OpenVMS の状態に戻ります。以前の動作では,あいまいなファイル指定が第 2 引数で論理名として渡された場合,ディレクトリ指定へ変換されます。あいまい性は,論理名が UNIX ファイル指定と OpenVMS ファイル指定のどちらかという点にあります。