前へ | 次へ | 目次 | 索引 |
次の機能テスト・マクロは, HP C RTL ライブラリの Curses およびソケット・サブセットを制御するために使用します。
XPG4 V2 に厳密に準拠するには, 4.4BSD と互換性のあるソケット・インタフェースが必要です。したがって,OpenVMS バージョン 7.0 以降で _XOPEN_SOURCE_EXTENDEDが定義されている場合, _SOCKADDR_LENは 1 に定義されます。
次の例はこれらのマクロの使い方を理解するのに役立ちます。
C RTL では,2G バイト (GB) 以上のファイル・サイズおよびオフセットを使用するアプリケーションをコンパイルする機能がサポートされるようになりました。この機能は, 64 ビット整数のファイル・オフセットを可能にすることで実現されています。
fseeko関数と ftello関数は, fseek関数および ftell関数と同じ動作を実行し, off_t型の値を受け付けるか,または返します。これにより, off_tの 64 ビット・バージョンを使用することができます。
C RTL 関数 lseek, mmap, ftuncate, truncate, stat, fstat, ftwも 64 ビット・ファイル・オフセットに対応できます。
新しい 64 ビット・インタフェースをコンパイル時に選択するには,
_LARGEFILE機能マクロを定義します。
1.5.8 32 ビット UID および GID マクロ (Alpha only)
C RTL では, 32 ビットのユーザ識別 (UID) とグループ識別 (GID) がサポートされます。 32 ビットの UID/GID を使用するように設定してアプリケーションをコンパイルすると,UID と GID はオペレーティング・システムの以前のバージョンと同様に UIC から生成されます。 UID/GID のサイズを制御するには,次のマクロを使用します。
C RTL では,多くの機能スイッチが提供されます。これらの機能スイッチは,DECC$ 論理名を使用して設定でき,実行時に C アプリケーションの動作に影響を与えます。
機能スイッチにより,新しい動作を導入したり,以前の動作をそのまま保持することもできます。
大部分の機能は,論理名を ENABLE に設定することで有効にし,論理名を DISABLE に設定することで無効にすることができます。
$ DEFINE DECC$feature ENABLE $ DEFINE DECC$feature DISABLE |
一部の機能論理名は数値に設定することができます。次の例を参照してください。
$ DEFINE DECC$PIPE_BUFFER_SIZE 32768 |
|
表 1-5 は,C RTL 機能論理名を,制御する機能の種類別に示しています。
機能論理名 | デフォルト |
---|---|
性能の最適化 | |
DECC$ENABLE_GETENV_CACHE | DISABLE |
DECC$LOCALE_CACHE_SIZE | 0 |
DECC$TZ_CACHE_SIZE | 2 |
従来の動作 | |
DECC$ALLOW_UNPRIVILEGED_NICE | DISABLE |
DECC$NO_ROOTED_SEARCH_LISTS | DISABLE |
DECC$THREAD_DATA_AST_SAFE | DISABLE |
DECC$V62_RECORD_GENERATION | DISABLE |
DECC$WRITE_SHORT_RECORDS | DISABLE |
DECC$XPG4_STRPTIME | DISABLE |
ファイル属性 | |
DECC$DEFAULT_LRL | 32767 |
DECC$DEFAULT_UDF_RECORD | DISABLE |
DECC$FIXED_LENGTH_SEEK_TO_EOF | DISABLE |
DECC$ACL_ACCESS_CHECK | DISABLE |
メールボックス | |
DECC$MAILBOX_CTX_STM | DISABLE |
UNIX 準拠のための変更 | |
DECC$SELECT_IGNORES_INVALID_FD | DISABLE |
DECC$STRTOL_ERANGE | DISABLE |
DECC$VALIDATE_SIGNAL_IN_KILL | DISABLE |
一般的な UNIX 拡張機能 | |
DECC$UNIX_LEVEL | DISABLE |
DECC$ARGV_PARSE_STYLE | DISABLE |
DECC$PIPE_BUFFER_SIZE | 512 |
DECC$PIPE_BUFFER_QUOTA | 512 |
DECC$STDIO_CTX_EOL | DISABLE |
DECC$USE_RAB64 | DISABLE |
DECC$GLOB_UNIX_STYLE | DISABLE |
UNIX 形式のファイル名をサポートするための拡張 | |
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION | DISABLE |
DECC$EFS_CHARSET | DISABLE |
DECC$ENABLE_TO_VMS_LOGNAME_CACHE | ENABLE |
DECC$FILENAME_UNIX_NO_VERSION | DISABLE |
DECC$FILENAME_UNIX_REPORT | DISABLE |
DECC$READDIR_DROPDOTNOTYPE | DISABLE |
DECC$RENAME_NO_INHERIT | DISABLE |
DECC$RENAME_ALLOW_DIR | DISABLE |
UNIX 形式のファイル属性をサポートするための拡張 | |
DECC$EFS_FILE_TIMESTAMPS | DISABLE |
DECC$EXEC_FILEATTR_INHERITANCE | DISABLE |
DECC$FILE_OWNER_UNIX | DISABLE |
DECC$FILE_PERMISSION_UNIX | DISABLE |
DECC$FILE_SHARING | DISABLE |
UNIX 準拠モード | |
DECC$DETACHED_CHILD_PROCESS | DISABLE |
DECC$FILENAME_UNIX_ONLY | DISABLE |
DECC$POSIX_STYLE_UID | DISABLE |
DECC$USE_JPI$_CREATOR | DISABLE |
POSIX 準拠のための新しい動作 | |
DECC$ALLOW_REMOVE_OPEN_FILES | DISABLE |
DECC$POSIX_SEEK_STREAM_FILE | DISABLE |
DECC$UMASK | RMS のデフォルト |
ファイル名の処理 | |
DECC$DISABLE_POSIX_ROOT | ENABLE |
DECC$EFS_CASE_PRESERVE | DISABLE |
DECC$EFS_CASE_SPECIAL | DISABLE |
DECC$EFS_NO_DOTS_IN_DIRNAME | DISABLE |
DECC$READDIR_KEEPDOTDIR | DISABLE |
DECC$UNIX_PATH_BEFORE_LOGNAME | DISABLE |
この後,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 形式の名前として解釈されます。
前へ 次へ 目次 索引