OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (上巻)


前へ 次へ 目次 索引


1.5.6 Curses およびソケット互換性マクロ

次の機能テスト・マクロは, HP C RTL ライブラリの Curses およびソケット・サブセットを制御するために使用します。

XPG4 V2 に厳密に準拠するには, 4.4BSD と互換性のあるソケット・インタフェースが必要です。したがって,OpenVMS バージョン 7.0 以降で _XOPEN_SOURCE_EXTENDEDが定義されている場合, _SOCKADDR_LENは 1 に定義されます。

次の例はこれらのマクロの使い方を理解するのに役立ちます。

1.5.7 2G バイトのファイル・サイズ・マクロ

C RTL では,2G バイト (GB) 以上のファイル・サイズおよびオフセットを使用するアプリケーションをコンパイルする機能がサポートされるようになりました。この機能は, 64 ビット整数のファイル・オフセットを可能にすることで実現されています。

fseeko関数と ftello関数は, fseek関数および ftell関数と同じ動作を実行し, off_t型の値を受け付けるか,または返します。これにより, off_tの 64 ビット・バージョンを使用することができます。

C RTL 関数 lseekmmapftuncatetruncatestatfstatftwも 64 ビット・ファイル・オフセットに対応できます。

新しい 64 ビット・インタフェースをコンパイル時に選択するには, _LARGEFILE機能マクロを定義します。

1.5.8 32 ビット UID および GID マクロ (Alpha only)

C RTL では, 32 ビットのユーザ識別 (UID) とグループ識別 (GID) がサポートされます。 32 ビットの UID/GID を使用するように設定してアプリケーションをコンパイルすると,UID と GID はオペレーティング・システムの以前のバージョンと同様に UIC から生成されます。 UID/GID のサイズを制御するには,次のマクロを使用します。

1.6 機能論理名の使用による C RTL 機能の有効化

C RTL では,多くの機能スイッチが提供されます。これらの機能スイッチは,DECC$ 論理名を使用して設定でき,実行時に C アプリケーションの動作に影響を与えます。

機能スイッチにより,新しい動作を導入したり,以前の動作をそのまま保持することもできます。

大部分の機能は,論理名を ENABLE に設定することで有効にし,論理名を DISABLE に設定することで無効にすることができます。


$ DEFINE DECC$feature ENABLE 
 
$ DEFINE DECC$feature DISABLE 

一部の機能論理名は数値に設定することができます。次の例を参照してください。


$ DEFINE DECC$PIPE_BUFFER_SIZE 32768 

注意

  • システム用の C RTL 機能論理名は設定しないでください。 OpenVMS コンポーネントなどの他のアプリケーションが,これらの論理名のデフォルト動作に依存しているため,機能論理名の設定を必要としているアプリケーション用の機能論理名だけを設定してください。

  • C ランタイム・ライブラリの以前のリリースで提供されていた古い機能論理名では,任意の同値文字列を設定することで機能が有効になると説明されていました。この説明は以前は間違いではなかったのですが,今後は,有効にするには機能論理名に "ENABLE" を設定し,無効にするには "DISABLE" を設定することを強くお勧めします。このようにしないと,予期しない結果になることがあります。
    予期しない結果になる理由は次のとおりです。

    • 以前のバージョンの C RTL では, 任意の同値文字列 (DISABLE であっても) により,機能論理名が有効になっていました。

    • 以降のバージョンおよび現在のバージョンの C RTL では,以下の同値文字列で機能論理名が無効になります。機能論理名を有効にするために,以下の文字列を使用することは避けてください。
      DISABLE
      0 (ゼロ)
      F
      FALSE
      N
      NO

      ここにリストされていない文字列では,機能論理名が有効になります。たとえば,誤って綴り間違いの "DSABLE" という文字列を設定しても,機能論理名が有効になります。

表 1-5 は,C RTL 機能論理名を,制御する機能の種類別に示しています。

表 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 を有効にすると,次の動作が実行されます。

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 が必要になることがあります。


前へ 次へ 目次 索引