日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

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


目次 索引



デフォルト設定では,ヘッダ・ファイルは,コンパイルが行われるオペレーティング・システムのバージョンによって提供される HP C RTL 内の API を有効にします。この処理は,『HP C User's Guide for OpenVMS Systems』に説明しているように, __VMS_VER マクロの定義済み設定によって行われます。たとえば,OpenVMS Version 6.2 でコンパイルすると, V6.2 およびそれより前のバージョンの HP C RTL API だけが使用可能になります。

__VMS_VER マクロの別の使用例として, OpenVMS Alpha Version 7.0 以降で提供される HP C RTL 関数の 64 ビット・バージョンのサポートがあります。すべてのヘッダ・ファイルで,64 ビットをサポートする関数は, __VMS_VER が OpenVMS Version 7.0 以降であることを示す場合にだけ有効になるように条件化されています。

オペレーティング・システムの以前のバージョンを対象にするには,次の操作を行います。

  1. DECC$SHR の古いバージョンを指すように論理名 DECC$SHR を定義します。コンパイラは DECC$SHR のテーブルを使用してルーチン名に接頭語を付ける処理を実行します。

  2. /DEFINE 修飾子を使用するか, #undef#defineプリプロセッサ・ディレクティブの組み合わせを使用して, __VMS_VER を適切に定義します。/DEFINE 修飾子を使用する場合は,定義済みマクロの再定義に関する警告を無効にする必要があるかもしれません。

オペレーティング・システムの新しいバージョンを対象にする操作は,常に可能なわけではありません。一部のバージョンでは,まだ存在しないオペレーティング・システムの新機能が新しい DECC$SHR.EXE で要求されることがあります。このようなバージョンでは,ステップ 1 で論理名 DECC$SHR を定義すると,コンパイル・エラーになります。

__VMS_VER の値を上書きするには,コンパイラのコマンド・ラインで __VMS_VER_OVERRIDE を定義します。値を指定せずに __VMS_VER_OVERRIDE を定義すると, __VMS_VER は最大値に設定されます。

1.4.5 互換性モード

次の定義済みマクロは,DEC C の以前のバージョンまたは OpenVMS オペレーティング・システムの以前のバージョンとのヘッダ・ファイルの互換性を選択するために使用します。

  • _DECC_V4_SOURCE

  • _VMS_V6_SOURCE

ヘッダ・ファイルでは,次の 2 種類の非互換性を制御できます。

  • 標準に準拠するために行う一部の変更では,ソース・コード・レベルの互換性が維持されませんが,バイナリ・レベルの互換性は維持されます。 DEC C Version 4.0 のソース互換性を選択するには, _DECC_V4_SOURCE マクロを使用します。

  • 標準に準拠するためのその他の変更では,バイナリまたは実行時の非互換性が発生します。
    一般に,プログラムを再コンパイルすると,新しい動作が実行されるようになります。このような場合は,_VMS_V6_SOURCE 機能テスト・マクロを使用して,以前の動作を保持します。
    しかし, exitkillwait関数の場合,これらのルーチンを ISO POSIX-1 準拠にするための OpenVMS Version 7.0 での変更は,デフォルトにするにはあまりに互換性がないと解釈されました。したがって,これらの場合は,デフォルトの動作は OpenVMS Version 7.0 より前のバージョンのシステムと同じです。 ISO POSIX-1 に準拠したこれらのルーチンのバージョンにアクセスするには, _POSIX_EXIT 機能テスト・マクロを使用します。

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

  • ISO POSIX-1 標準に準拠するために,次のものに対する typedef<types.h>に追加されました。

       dev_t         off_t 
       gid_t         pid_t 
       ino_t         size_t 
       mode_t        ssize_t 
       nlink_t       uid_t 
    


    DEC C Version 5.2 より前のバージョンを使用する古い開発環境では, <types.h>にこれらの typedefがないため,別のモジュールにこれらの定義を追加する必要があるかもしれません。このような場合は,DEC C Version 5.2 で提供される <types.h>を使用してコンパイルすると,コンパイル・エラーが発生する可能性があります。
    現在の環境を維持し, DEC C Version 5.2 の <types.h>を取り込むには, _DECC_V4_SOURCE を定義してコンパイルします。このようにすると, DEC C Version 5.2 のヘッダから互換性のない参照が排除されます。たとえば, <types.h>では,前に示した typedefsは有効になりません。

  • OpenVMS Version 7.0 では, HP C RTL の getuid関数と geteuid関数は, UIC のグループの部分とメンバの部分の両方を含む OpenVMS UIC (ユーザ識別コード) を返すように定義されています。 DEC C RTL の以前のバージョンでは,これらの関数は UIC コードのメンバ番号だけを返していました。
    <unistd.h>(ISO POSIX-1 標準で要求) および <unixlib.h>( HP C RTL 互換性の場合) 内の getuidgeteuidのプロトタイプは変更されていません。デフォルト設定では, getuidgeteuidを呼び出すプログラムを新たにコンパイルすると,新しい定義が使用されます。つまり,これらの関数は OpenVMS の UIC を返します。
    プログラムで getuidgeteuidに関して, OpenVMS Version 7.0 より前のバージョンの動作を保持したい場合は, _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルします。

  • OpenVMS Version 7.0 では, HP C RTL の exit関数は ISO POSIX-1 のセマンティックで定義されています。この結果, exitに対する入力状態引数は 0〜255 の値になります ( これより前のバージョンでは, exitは状態パラメータで OpenVMS の条件コードを受け付けることができました )。
    デフォルトでは,OpenVMS システムの exit関数の動作は以前と同じです。つまり, exitは OpenVMS の条件コードを受け付けます。 ISO POSIX-1 と互換性のある exit関数を有効にするには, _POSIX_EXIT 機能テスト・マクロを定義してコンパイルします。



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

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

  • _BSD44_CURSES
    このマクロは,4.4BSD Berkeley Software Distribution から Curses パッケージを選択します。

  • _VMS_CURSES
    このマクロは, VAX C コンパイラをベースにした Curses パッケージを選択します。これはデフォルトの Curses パッケージです。

  • _SOCKADDR_LEN
    このマクロは, 4.4BSD および XPG4 V2 準拠のソケット・インタフェースを選択するために使用します。これらのインタフェースでは,基礎になる TCP/IP ソフトウェアでのサポートが必要です。稼動する TCP/IP ソフトウェアのバージョンで 4.4BSD ソケットがサポートされるかどうかについては, TCP/IP のベンダにお問い合わせください。

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

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

  • AE,AL,AS,AM,BC など, BSD Curses パッケージで使用される termcap フィールドを指すポインタを表すシンボル定数は,_BSD44_CURSES が定義されている場合, <curses.h>でのみ有効になります。

  • <socket.h>ヘッダ・ファイルは, _SOCKADDR_LEN または _XOPEN_SOURCE_EXTENDED が定義されている場合だけ, 4.4BSD sockaddr構造体を定義します。これらが定義されていない場合は, <socket.h>は 4.4BSD より前の sockaddr構造体を定義します。 _SOCKADDR_LEN が定義され, _XOPEN_SOURCE_EXTENDED が定義されていない場合は, <socket.h>ヘッダ・ファイルは osockaddr構造体も定義します。この構造体は互換性を維持するために使用される 4.3BSD の sockaddr構造体です。 XPG4 V2 では osockaddr構造体を定義していないため, _XOPEN_SOURCE_EXTENDED モードでは有効になりません。



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

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

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

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

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

1.4.8 32 ビット UID および GID マクロ (Integrity,Alpha)

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

デフォルトで 32 ビットの UID/GID を使用するシステムで, 16 ビットの UID/GID をサポートするようにアプリケーションをコンパイルするには,_DECC_SHORT_GID_T マクロに 1 を定義します。

1.4.9 標準準拠の stat 構造体 (Integrity,Alpha)

C RTL は,X/Open 標準に準拠した stat構造体の定義および関連する定義をサポートしています。これらの新しい定義を使用するには,機能テスト・マクロ _USE_STD_STAT を使用してアプリケーションをコンパイルする必要があります。

_USE_STD_STAT を使用してコンパイルすると, stat構造体が以下のように変更されます。

  • ino_tunsigned quadword intとして定義されます。 _USE_STD_STAT を使用しない場合は, unsigned shortとして定義されます。

  • dev_tが 64 ビット整数として定義されます。 _USE_STD_STAT を使用しない場合は,32 ビット文字ポインタとして定義されます。

  • off_tが, _LARGEFILE マクロが定義されているかのように, 64 ビット整数として定義されます。 _USE_STD_STAT を使用しない場合は, 32 ビット整数として定義されます。

  • フィールド st_devおよび st_rdevが,デバイスごとに違った値となります。 _USE_STD_STAT を使用しない場合は,一意性は保証されません。

  • フィールド st_blksizeおよび st_blocksが追加されます。 _USE_STD_STAT を使用しない場合は,これらのフィールドは存在しません。



1.4.10 _toupper と _tolower の従来の動作での使用 (Integrity,Alpha)

OpenVMS Version 8.3 の _tolowerマクロと _toupperマクロでは,特に指定しない限りパラメータを 2 回以上評価しないようにして, C99 ANSI 標準と X/Open 仕様に準拠させるようになっています。つまり,これらのマクロでは,対応する tolowerまたは toupper関数を単に呼び出すだけです。そのため,式を評価する回数をユーザが指定できる場合の副作用 (i++ や関数呼び出しなど) が回避できるようになっています。

_tolowerマクロと _toupperマクロを以前の仕様の最適化された動作のままで使用する場合は, /DEFINE=_FAST_TOUPPER を指定してコンパイルしてください。そうすれば,これらのマクロは,以前のリリースと同じように,実行時の呼び出しオーバヘッドを避けるように最適化されます。ただし,その場合はマクロのパラメータが 2 回以上評価されて計算方法が決定されるので,望ましくない副作用が発生することもあります。

1.4.11 高速なインライン put 関数および get 関数の使用 (Integrity,Alpha)

__UNIX_PUTC マクロを定義してコンパイルすれば,次の I/O 関数で高速なインライン関数を使用するように最適化できます。

fgetc 
fputc 
putc 
putchar 
fgetc_unlocked 
fputc_unlocked 
putc_unlocked 
putchar_unlocked 



1.5 機能論理名の使用による 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-4 は,C RTL 機能論理名を,制御する機能の種類別に示しています。

表 1-4 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$PRINTF_USES_VAX_ROUND 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$STREAM_PIPE DISABLE
DECC$POPEN_NO_CRLF_REC_ATTR DISABLE
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_ENCODING_UTF8 DISABLE
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$POSIX_COMPLIANT_PATHNAMES DISABLE
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


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.