日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
この後,C RTL 機能論理名をアルファベット順に示し,その説明も示します。特に示した場合を除き,機能論理名は ENABLE で有効になり, DISABLE で無効になります。
DECC$ACL_ACCESS_CHECK
DECC$ACL_ACCESS_CHECK 機能論理名は access関数の動作を制御します。DECC$ACL_ACCESS_CHECK が有効な場合, access関数は UIC 保護と OpenVMS アクセス制御リスト(ACL) の両方を確認します。
DECC$ACL_ACCESS_CHECK が無効な場合, access関数は UIC 保護のみを確認します。
DECC$ALLOW_REMOVE_OPEN_FILES
DECC$ALLOW_REMOVE_OPEN_FILES 機能論理名は,オープン・ファイルに対する remove関数の動作を制御します。一般的に,この操作は失敗します。ただし,POSIX の準拠条件では,この操作は成功することになっています。DECC$ALLOW_REMOVE_OPEN_FILES が有効の場合,この POSIX 準拠の動作が行われます。
DECC$ALLOW_UNPRIVILEGED_NICE
DECC$ALLOW_UNPRIVILEGED_NICE が有効の場合, nice関数は,呼び出し元プロセスの特権をチェックしないという従来の動作を行います (つまり,任意のユーザが, nice値を小さくして,プロセスの優先順位を高くすることができます)。また,MAX_PRIORITY を超える優先順位を,呼び出し元が設定した場合, nice値にはベースの優先順位が設定されます。DECC$ALLOW_UNPRIVILEGED_NICE が無効の場合, nice関数は X/Open 標準に準拠し,呼び出し元プロセスの特権をチェックします (つまり,ALTPRI 特権を持つユーザだけが nice値を小さくして,プロセスの優先順位を高くすることができます)。また,MAX_PRIORITY を超える優先順位を呼び出し元が設定した場合, nice値には MAX_PRIORITY が設定されます。
DECC$ARGV_PARSE_STYLE
DECC$ARGV_PARSE_STYLE を有効に設定すると,プロセスが SET PROCESS/PARSE_STYLE=EXTENDED を使用して拡張 DCL 解析用に設定されている場合,コマンド・ライン引数で大文字と小文字の区別が保持されます。DECC$ARGV_PARSE_STYLE は論理名として外部で定義するか,または LIB$INITIALIZE 機能を使用して呼び出した関数の内部で設定する必要があります。これは, main関数が呼び出される前に,この論理名が評価されるからです。
DECC$DEFAULT_LRL
DECC$DEFAULT_LRL は,最長のレコード長に関する RMS 属性のデフォルト値を指定します。デフォルト値 32767 は RMSでサポートされる最大レコード・サイズです。デフォルト値: 32767
最大値: 32767
DECC$DEFAULT_UDF_RECORD
DECC$DEFAULT_UDF_RECORD を有効に設定すると,STREAMLF を除き,他のすべてのファイルに対して,ファイル・アクセス・モードのデフォルトが STREAM モードではなく, RECORD モードになります。DECC$DETACHED_CHILD_PROCESS
DECC$DETACHED_CHILD_PROCESS を有効に設定すると, vforkおよび execを使用して生成される子プロセスは,サブプロセスではなく,独立プロセスとして生成されます。この機能のサポートは限定されています。場合によっては,コンソールを親プロセスと独立プロセスの間で共用することができないため, execが異常終了することがあります。
DECC$DISABLE_POSIX_ROOT
DECC$DISABLE_POSIX_ROOT を有効に設定すると, SYS$POSIX_ROOT によって定義される POSIX ルート・ディレクトリのサポートが無効になります。DECC$DISABLE_POSIX_ROOT を無効に設定すると, SYS$POSIX_ROOT 論理名はファイル・パス "/" と同じであると解釈されます。スラッシュ (/) で始まる UNIX パスが指定され,先頭のスラッシュの後の値を論理名として変換できない場合は,指定された UNIX のファイル・パスの親ディレクトリとして SYS$POSIX_ROOT が使用されます。
C RTL では,実際のディレクトリのように動作する UNIX 形式のルートがサポートされます。このため,次のような動作が可能です。
% cd / % mkdir /dirname % tar -xvf tarfile.tar /dirname % ls /
以前は,C RTL は "/" をディレクトリ名として認識しませんでした。 "/" から始まるファイル・パスの通常の処理では,最初の要素は論理名またはデバイス名として解釈されていました。このような解釈ができないときは, /dev/nullという名前,および /binおよび /tmpから始まる名前に対して特殊な処理が行われていました。
/dev/null NLA0: /bin SYS$SYSTEM: /tmp SYS$SCRATCH:
これらの動作は,互換性を維持するために保持されています。さらに,SYS$POSIX_ROOT という論理名を "/" に対応するものとして解釈するサポートが C RTL に追加されました。
C RTL で使用するためにこの機能を有効にするには, SYS$POSIX_ROOT を隠し論理名として定義します。次の例を参照してください。
$ DEFINE/TRANSLATION=(CONCEALED,TERMINAL) SYS$POSIX_ROOT "$1$DKA0:[SYS0.abc.]"
この機能を無効にするには,次のように指定します。
$ DEFINE DECC$DISABLE_POSIX_ROOT DISABLE
SYS$POSIX_ROOT を有効にすると,次の動作が実行されます。
- "/" から始まる UNIX パスの既存の変換が失敗し, SYS$POSIX_ROOT が定義されている場合は,名前は /sys$posix_rootから始まるかのように解釈されます。
- OpenVMS から UNIX 形式のファイル名に変換するときに, OpenVMS の名前が "SYS$POSIX_ROOT:" から始まる場合, "SYS$POSIX_ROOT:" は削除されます。たとえば,SYS$POSIX_ROOT:[dirname] は /dirnameになります。このようにして作成された名前が論理名または上記の特殊なケースのいずれかとして解釈可能な場合は,結果は /dirnameではなく, /./dirnameになります。
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION を有効に設定すると,変換ルーチン decc$to_vmsは,UNIX形式の名前の先頭にスラッシュ (/) がある場合,最初の要素だけを論理名として取り扱います。DECC$EFS_CASE_PRESERVE
DECC$EFS_CASE_PRESERVE を有効に設定すると, ODS-5 ディスクのファイル名で大文字と小文字の区別が保持されます。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 文字がサポートされます。
<NUL>) / * " ?
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 への必要な変換がサポートされます。
注意
C RTL ファイル名処理において,次のような特別なケースがあります。
- ^.dirで終わるパス名はディレクトリとして扱われ,これらの文字は変換時に文字列から切り捨てられます。
- ^/で始まるパス名は,次のトークンを論理名あるいはルートからのディレクトリ名として扱います。
以下のサンプル・プログラムはこれらについて示しています。
#include <stdio.h> #include <dirent.h> #include <unixlib.h> #include <string.h> main() { char adir[80]; DIR *dir; struct dirent *dp; int decc_feature_efs_charset_index = 0; int decc_feature_efs_charset_default_val = 0; if ( ( (decc_feature_efs_charset_index = decc$feature_get_index("DECC$EFS_CHARSET")) == -1 ) || ( (decc_feature_efs_charset_default_val = decc$feature_get_value(decc_feature_efs_charset_index, 0)) == -1 ) || ( (decc$feature_set_value(decc_feature_efs_charset_index, 1, TRUE) == -1)) ) { printf("Error setting up DECC$EFS_CHARSET macro\n"); } strcpy(adir, "SYS$SYSDEVICE:[SSHTEST.TEST.a^,test^.dir^;22]"); printf("\n\nFor %s\n", adir); mrb: dir = opendir(adir); if(dir) { do { dp = readdir(dir); if(dp->d_name) printf("%s\n", dp->d_name); } while (dp); } closedir(dir); strcpy(adir, "SYS$SYSDEVICE:[SSHTEST.TEST.a^,test^.dir]"); printf("\n\nFor %s\n", adir); dir = opendir(adir); if(dir) { do { dp = readdir(dir); if(dp->d_name) printf("%s\n", dp->d_name); } while (dp); } closedir(dir); strcpy(adir, "SYS$SYSDEVICE:[SSHTEST.TEST.a^\\test]"); printf("\n\nFor %s\n", adir); dir = opendir(adir); if(dir) { do { dp = readdir(dir); if(dp->d_name) printf("%s\n", dp->d_name); } while (dp); } strcpy(adir, "SYS$SYSDEVICE:[SSHTEST.TEST.copies]"); printf("\n\nFor %s\n", adir); dir = opendir(adir); if(dir) { do { dp = readdir(dir); if(dp->d_name) printf("%s\n", dp->d_name); } while (dp); } closedir(dir); strcpy(adir, "/SYS$SYSDEVICE/SSHTEST/TEST/copies"); printf("\n\nFor %s\n", adir); dir = opendir(adir); if(dir) { do { dp = readdir(dir); if(dp->d_name) printf("%s\n", dp->d_name); } while (dp); } closedir(dir); }
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_ENCODING_UTF8
ファイル名を扱う C RTL ルーチンでは,UNIX スタイルのファイル名を使用する場合に UTF-8 エンコーディングのサポートします。たとえば,ODS-5 ディスクでは, OpenVMS の DIRECTORY コマンドで次のような文字を含むファイル名をサポートします。
disk:[mydir]^U65E5^U672C^U8A9E.txt
このファイル名には,日,出身, 言語を意味する 3 つの UCS-2 文字が含まれています(ここではそれぞれ xxx,yyy,zzz と表記します)。
UTF-8 サポートが有効な場合,C プログラムは, VMS ディレクトリからこのファイル名を UTF-8 でエンコードされた文字列として読み取り、扱うことが可能になりました。
たとえば,後ろに readdirを伴う opendir("/disk/mydir")は,提供される dirent構造体の d_name フィールドに次のようなファイルを置くことができます。
"\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E.txt"
このファイルは次のいずれかの呼び出しでオープンできます。
open("/disk/mydir/\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E.txt",O_RDWR,0) open("/disk/mydir/xxxyyyzzz.txt", O_RDWR,0)
上記の "\xE6\x97\xA5" は,UTF-8 エンコーディングで xxx 文字を表す,バイト・ストリーム E697A5 です。次の例では実際の文字でファイル名が示されています。
図 1-2 Unicode ファイル名の例
この機能は,UTF-8 でエンコードされたファイル名を使用する内部ソフトウェアの UNIX との互換性を拡張します。
DECC$FILENAME_ENCODING_UTF8 機能論理名は, UNIX スタイルで指定された Unicode の UTF-8 エンコーディングのファイル名を C RTL が正しく解釈するかどうかを制御します。
この機能論理名はデフォルトでは定義されておらず,ファイル名を ASCII と Latin-1 の形式として扱う C RTL の動作が適用されます。
この機能は ODS-5 ディスクでのみ機能します。このため,Unicode UTF-8 エンコーディングを有効にするには, DECC$FILENAME_ENCODING_UTF8 と DECC$EFS_CHARSET 論理名の両方を ENABLE と定義する必要があります。
: [ ^ |
DECC$FILENAME_UNIX_NO_VERSION を無効に設定すると, UNIX 形式の名前でバージョン番号を報告するときに,その前にピリオド (.) が付加されます。
DECC$FILENAME_UNIX_REPORT を無効に設定すると,関数呼び出しで指定しない限り,ファイル名は OpenVMS 形式で報告されます。
DECC$FILE_PERMISSION_UNIX を無効に設定すると,モード 0 およびモード 0777 は RMS のデフォルト保護またはファイルの前のバージョンの保護を使用することを示します。また,新しいディレクトリのアクセス許可は, DELETE アクセス許可の無効化も含めて,OpenVMS の規則に従います。
目次 | 索引 |
|