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 関数
lseek,
mmap,
ftuncate,
truncate,
stat,
fstat,
ftwも 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_tが
unsigned 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 関数で高速なインライン関数を使用するように最適化できます。