OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (上巻)
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 プログラムの子プロセスに影響します。
バージョン 7.3-2 より前の OpenVMS では, DECC$EXEC_FILEATTR_INHERITANCE は,有効か無効のどちらかです。
- DECC$EXEC_FILEATTR_INHERITANCE が有効の場合,現在のファイル・ポインタとファイル・オープン・モードが,
exec呼び出しで子プロセスに渡されます。
- この論理名が無効の場合,子プロセスは追加モードやファイル・ポインタを継承しません。
バージョン 7.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 モードを選択します。
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 バージョン 7.3-1 より前の場合,論理名の内容とは関係なく,
decc$to_vms関数はコロン (:) だけを付加していました。最上位の論理名と最上位でない論理名が混在した検索リストの場合,期待どおりの結果が得られます。
- OpenVMS バージョン 7.3-1 およびそれ以降では,混在している検索リストの 1 番目の要素が最上位の論理名の場合,
decc$to_vmsが論理名に ":[000000]" を付加します。その結果,OpenVMS のバージョン 7.3-1 より前のリリースとは,異なる動作になります。
DECC$NO_ROOTED_SEARCH_LISTS は,
decc$to_vms関数が検索リスト論理名を解決する方法を制御します。また,OpenVMS の動作をバージョン 7.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 バージョン 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 バージョン 7.3-2 では,パイプのメールボックスのバッファ・クォータを指定する,
int型の第 4 引数 (オプション) が,
pipe関数に追加されました。以前のバージョンの OpenVMS では,バッファ・クォータはバッファ・サイズと同じでした。
DECC$PIPE_BUFFER_QUOTA を使用すると,この関数のオプションの第 4 引数を省略した場合に,
pipe関数が使用するバッファ・クォータを指定できます。
pipeのオプションの第 4 引数を省略し, DECC$PIPE_BUFFER_QUOTA も定義していない場合,バッファ・クォータは,デフォルトで,以前と同じようにバッファ・サイズになります。
デフォルト値: 512
最小値: 512
最大値: 2147483647
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 ファイル指定のどちらかという点にあります。
例を次に示します。
rename("file.ext", "logical_name") /* where logical_name = dev:[dir.subdir] */
/* and :[dir.subdir] exists */
|
次のような結果になります。
この例では,ファイル名の変更により,あるディレクトリから別のディレクトリへファイルが移動されます。この動作は,V7.3-1 より前の OpenVMS の古い動作と同じです。またこの例では,
dev:[dir.subdir]が存在しない場合,
renameがエラーを返します。
DECC$RENAME_ALLOW_DIR を無効にすると,
renameの logical_name 引数の変換が,より UNIX に準拠したものになります。
例を次に示します。
rename("file.ext", "logical_name") /* where logical_name = dev:[dir.subdir] */
|
次のような結果になります。
この例では,logical_name 引数の
subdir部分を新しいファイル名として使用して,ファイル名が変更されます。これは,UNIX システム上ではファイルからディレクトリへの名前変更 (rename) はできないためです。このため
renameは内部的に
"logical_name"をファイル名に変換し, to a file name,
dev:[dir]subdirが最も妥当な変換結果となります。
この新しい機能には,名前をファイルに変更するのではなくディレクトリに変更するという副作用があります。次に例を示します。
rename ( "file1.ext", "dir2" ) /* dir2 is not a logical */
|
DECC$RENAME_ALLOW_DIR が無効な場合,この例では,サブディレクトリ
[.dir2]が存在するかどうかに関わらず
dir2.extという結果になります。
DECC$RENAME_ALLOW_DIR が有効な場合,
[.dir2]が存在しなければ
dir2.extという結果になります。サブディレクトリ
[.dir2]が存在する場合は,
[.dir2]file1.extという結果になります。
注意
DECC$RENAME_NO_INHERIT が有効の場合は,UNIX 準拠の動作が行われます。このため,DECC$RENAME_ALLOW_DIR は無視され,ファイルからディレクトリへの名前変更 (rename) は許されません。
|
DECC$SELECT_IGNORES_INVALID_FD
DECC$SELECT_IGNORES_INVALID_FD を有効に設定すると,記述子セットのいずれかに不正なファイル記述子が指定されている場合,
selectは異常終了し,
errnoは EBADF に設定されます。
DECC$SELECT_IGNORES_INVALID_FD を無効に設定すると,
selectは不正なファイル記述子を無視します。
DECC$STDIO_CTX_EOL
DECC$STDIO_CTX_EOL を有効に設定すると,ストリーム・アクセスのための
stdoutおよび
stderrへの書き込みは,区切り文字が確認されるか,バッファが満杯になるまで実行されません。
DECC$STDIO_CTX_EOL を無効に設定すると,
fwriteを実行するたびに個別に書き込みが実行され,メールボックスとレコード・ファイルの場合,個別のレコードが作成されます。
DECC$STRTOL_ERANGE
DECC$STRTOL_ERANGE を有効に設定すると, ERANGE エラーに対する
strtolの動作は,文字列内の残りのすべての桁を使用するように修正されます。
DECC$STRTOL_ERANGE を無効に設定すると,問題が発生した桁にポインタを保持するというこれまでの動作が有効になります。
DECC$THREAD_DATA_AST_SAFE
C RTL には,AST のために割り振られるデータ用とは別に,非 AST レベルでスレッドによって割り振られるスレッド固有のデータのための記憶域を割り振るモードがあります。このモードでは,スレッド固有のデータにアクセスするたびに, LIB$AST_IN_PROG を呼び出す必要があり, C RTL でスレッド固有のデータにアクセスする場合,大きなオーバヘッドが発生する可能性があります。
代替モードでは,スレッド固有のデータは,別の関数がロックしている場合にだけ保護されます。このモードでは,C RTL の内部で使用中のデータは保護されますが, AST がデータを変更するのを呼び出し元で保護することはできません。