前へ | 次へ | 目次 | 索引 |
性能を改善するための各種の拡張 (特に,高速の UNIX 名変換による) には,以下のものがあります。
以下の新しい C RTL 関数が,OpenVMS バージョン 7.3-2 に用意されています。
ファイルの読み取り/書き込み関数
pread readv __writev64 pwrite _readv64 |
プリント関数
snprintf vsnprintf |
シグナル関数
sighold sigignore sigrelse sigwait sigtimedwait sigwaitinfo |
時間関数
nanosleep clock_gettime clock_getres clock_settime |
パスワード関数
getpwnam_r _getpwnam_r64 __getpwnam64 _getpwent64 getpwuid getpwuid_r __getpwuid64 _getpwuid_r64 |
セキュリティ/インパーソネーション関数
endgrent getgrnam getsid setpgrp getgrent getgrnam_r seteuid setregid getgrgid getpgid setgrent setreuid getgrgid_r getpgrp setpgid setsid |
ソケット関数
poll |
その他の関数
a64l globfree rand_r decc$set_child_default_dir glob l64a ttyname_r |
endpwent setgid geteuid getegid setpwent getgid getpwent setuid getuid ttyname |
ISO/ANSI C 標準では,ANSI C のインプリメンテーションで提供される関数,マクロ,関連する型を登録したライブラリを定義しています。『HP C Language Reference Manual』では,すべての HP C プラットフォームに共通の ANSI 準拠のライブラリの機能について説明しています。『HP C ランタイム・ライブラリ・リファレンス・マニュアル』では,これらのルーチンについてさらに詳しく説明し, OpenVMS 環境でこれらのルーチンを使用する方法についても説明します。また,OpenVMS システムで提供される追加のヘッダ・ファイル,関数,型,マクロについても説明します。
すべてのライブラリ関数はヘッダ・ファイルで宣言されます。ヘッダ・ファイルの内容をプログラムで使用できるようにするには, #includeプリプロセッサ・ディレクティブを使用してヘッダ・ファイルを取り込みます。次の例を参照してください。
#include <stdlib.h> |
各ヘッダ・ファイルには,関連する関数の集合に対する関数プロトタイプが格納されており,これらの関数を使用するのに必要な型とマクロを定義しています。
OpenVMS Alpha システムでヘッダ・ファイルの一覧を表示するには,次のコマンドを使用します。
$ LIBRARY/LIST ALPHA$LIBRARY:SYS$STARLET_C.TLB $ LIBRARY/LIST ALPHA$LIBRARY:DECC$RTLDEF.TLB $ DIR SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF]*.H; $ DIR ALPHA$LIBRARY:*.H; |
最初のコマンドは,OpenVMS システム・インタフェースのヘッダ・ファイルのテキスト・モジュール形式を一覧表示します。 2 番目のコマンドは, HP C 言語インタフェースのヘッダ・ファイルのテキスト・モジュール形式を一覧表示します。 3 番目のコマンドは, HP C 言語イタンフェースの *.H ヘッダ・ファイルを一覧表示します。 4 番目のコマンドは,レイヤード・プロダクトおよび他のアプリケーションの *.H ヘッダ・ファイルを一覧表示します。
SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF] ディレクトリは,表示のための単なる参照領域です。 #includeでファイルを検索する場合,コンパイラは *.TLB ファイルを確認します。 |
OpenVMS VAX システムでヘッダ・ファイルの一覧を表示するには,次のいずれかのコマンドを使用します。
$ DIR 'F$TRNLMN("DECC$LIBRARY_INCLUDE")'*.H; $ DIR DECC$LIBRARY_INCLUDE:*.H; |
OpenVMS VAX システムでは,次のコマンドは追加ヘッダ・ファイルや重複ヘッダ・ファイルも検索します。
$ DIR SYS$LIBRARY:*.H; |
しかし, SYS$LIBRARY から検索される重複ファイル ( <stdio.h>など) は,おそらく VAX C バージョン 3.2 環境をサポートするものであり, HP C では使用されません。
関数定義自体がヘッダ・ファイルに含まれているわけではなく,これらの定義は OpenVMS オペレーティング・システムに付属している HP C Run-Time Library (RTL) に格納されています。 HP C RTL を使用する前に,次のことを十分理解しておく必要があります。
HP C RTL を効果的に使用するには,これらのすべてのトピックに関する知識が必要です。この章では,これらのトピックと HP C RTL との関連を示します。本書の他の章を読む前に,この章を必ずお読みください。
HP C RTL の基本的な目的は, C プログラムで I/O 操作を実行するための手段を提供することです。 C 言語自体には情報の読み書き機能はありません。 I/O のサポートの他に, HP C RTL では他の多くの作業を実行する手段も提供されます。
第 2 〜 11 章では, HP C RTL でサポートされるさまざまなタスクについて説明します。「リファレンス・セクション」では,これらのタスクを実行するために提供されるすべての関数とマクロをアルファベット順に示し,詳しく説明します。
1.1 HP C Run-Time Library の使用
HP C RTL を使用する場合,インプリメンテーション固有の特徴を理解しておく必要があります。
まず,C プログラムで HP C RTL の関数を使用する場合, mainという名前の関数,または main_programオプションを使用する関数がプログラム内に存在することを確認してください。詳細については,『HP C Language Reference Manual』または『HP C User's Guide for OpenVMS Systems』を参照してください。
次に, HP C RTL 関数は実行時に実行されますが,これらの関数に対する参照はリンク時に解決されます。プログラムをリンクすると,OpenVMS リンカは, LINK コマンド・ラインに指定された共用可能コード・ライブラリやオブジェクト・コード・ライブラリを検索することにより, HP C RTL 関数に対するすべての参照を解決します。
HP C RTL は共用可能イメージとして使用でき, HP C RTL オブジェクト・ライブラリを使用することもできます。
HP C RTL を共用可能イメージとして使用する場合, RTL のコードは SYS$SHARE 内のイメージ・ファイルに存在し,すべての HP C プログラムで共用されます。実行後,制御はユーザ・プログラムに返されます。このプロセスには次のような多くの利点があります。
HP C RTL にリンクする場合, LNK$LIBRARY 論理名を定義する必要はありません。実際には,共用可能イメージとのリンクの方が HP C RTL オブジェクト・ライブラリとのリンクより便利であるため, LNK$LIBRARY の割り当ては解除する必要があります。
HP C RTL とのリンクに関する補足情報については,OpenVMS, HP C ,HP C++ のリリース・ノートを参照してください。
1.2 Alpha システムでの RTL リンク・オプション (Alpha only)
ここでは,OpenVMS Alpha システムで HP C および HP C++ プログラムを HP C RTL とリンクする複数の方法について説明します。
1.2.1 共用可能イメージとのリンク
ほとんどのリンクでは,ALPHA$LIBRARY ディレクトリ内の HP C RTL 共用可能イメージ DECC$SHR.EXE を使用します。
共用可能イメージ VAXCRTL.EXE および VAXCRTLG.EXE は, OpenVMS Alpha システムにありません。唯一の C RTL 共用可能イメージは ALPHA$LIBRARY:DECC$SHR.EXE であり,リンカは IMAGELIB.OLB を通じて自動的にこのイメージを検索します。
VAXCRTL*.EXE は Alpha システムに存在しないため,次のことに注意する必要があります。
共用可能イメージに対してリンクするには,LINK コマンドを使用します。次の例を参照してください。
$ LINK PROG1 |
リンカは自動的に IMAGELIB.OLB から DECC$SHR.EXE を検索し,すべての C RTL 参照を解決します。
1.2.2 オブジェクト・ライブラリとのリンク
HP C RTL オブジェクト・ライブラリは, /PREFIX=ALL を使用せずにコンパイルされたプログラムをリンクする場合にだけ使用します。
OpenVMS Alpha システムでは, HP C RTL は ALPHA$LIBRARY ディレクトリに次のオブジェクト・ライブラリを提供します。
Curses 関数へのアクセスを可能にするオブジェクト・ライブラリ VAXCCURSE.OLB には,接頭語のないエントリ・ポイントが含まれており,これらのエントリ・ポイントは接頭語の付いた適切なエントリ・ポイントに変換されます。
オブジェクト・ライブラリ VAXCRTL.OLB,VAXCRTLD.OLB,VAXCRTLT.OLB, VAXCRTLX.OLB,VAXCRTLDX.OLB,VAXCRTLTX.OLB には,使用するオブジェクト・ライブラリに指定されている浮動小数点型に応じて,適切な接頭語の付いたエントリ・ポイントに変換される接頭語のないエントリ・ポイントも含まれています。
/L_DOUBLE_SIZE=128 がデフォルトです。
LINK コマンドには,VAXCRTL*.OLB ライブラリを 1 つだけ指定し,必要に応じて VAXCCURSE.OLB ライブラリも指定します。
コンパイラのデフォルト・モード (/STANDARD=RELAXED_ANSI89) および厳密な ANSI C モードでは, ANSI C 標準ライブラリ・ルーチンに対するすべての呼び出しに,接頭語 DECC$ が自動的に付加されます。 /[NO]PREFIX_LIBRARY_ENTRIES 修飾子を使用すると,この動作を変更して,すべての HP C RTL の名前に DECC$ という接頭語を付けるか, HP C RTL の名前に接頭語を付けないようにすることができます。この修飾子には他のオプションも用意されています。詳細については,この章の /[NO]PREFIX_LIBRARY_ENTRIES 修飾子の説明を参照してください。
/NOSYSSHR を使用してリンクするときに, HP C RTL ルーチンの呼び出しに DECC$ という接頭語を付ける場合,リンクが必要なのは STARLET.OLB 内のモジュールだけです。 STARLET.OLB はリンカで自動的に検索されるため ( リンク修飾子 /NOSYSLIB を使用しない限り ),接頭語の付いたすべての RTL 外部名は自動的に解決されます。
HP C RTL ルーチンの呼び出しに接頭語を付けない場合は,必要な浮動小数点型に応じて,あるいは Curses 関数が必要かどうかに応じて, VAXCRTL.OLB,VAXCRTLD.OLB,VAXCRTLT.OLB ( または VAXCRTLX.OLB,VAXCRTLDX.OLB,VAXCRTLDX.OLB), VAXCCURSE.OLB のいずれかに対して明示的にリンクする必要があります。 /NOSYSSHR を使用してリンクする場合は,接頭語の付いた HP C RTL エントリ・ポイントは STARLET.OLB で解決されます。 /SYSSHR (デフォルト) を使用してリンクする場合は,接頭語の付いた HP C RTL エントリ・ポイントは DECC$SHR.EXE で解決されます。
1.2.3 例
次の例では, HP C RTL とリンクするための複数の方法を示しています。 図 1-1 は,これらの例を図でわかりやすく示しています。
$ CC/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES PROG1 $ LINK PROG1 |
リンカは IMAGELIB.OLB から自動的に DECC$SHR.EXE を検索します。
$ CC/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES PROG1 $ LINK/NOSYSSHR PROG1 |
ユーザ・プログラム内で接頭語の付いた RTL シンボル参照は,STARLET.OLB に含まれる HP C RTL オブジェクト・ライブラリで解決されます。
|
$ CC/NOPREFIX_LIBRARY_ENTRIES PROG1 $ LINK PROG1, MYLIB/LIBRARY, ALPHA$LIBRARY:VAXCRTLX.OLB/LIBRARY |
ユーザ・プログラム内で接頭語のない HP C RTL シンボル参照は, MYLIB および VAXCRTL.OLB で解決されます。
VAXCRTLX.OLB 内で接頭語の付いた HP C RTL シンボル参照は, IMAGELIB.OLB を通じて DECC$SHR.EXE で解決されます。
この同じ例で,IEEE T-floating 倍精度浮動小数点をサポートするには,次のコンパイルおよびリンク・コマンドを使用します。
$ CC/NOPREFIX_LIBRARY_ENTRIES/FLOAT=IEEE_FLOAT PROG1 $ LINK PROG1, MYLIB/LIBRARY, ALPHA$LIBRARY:VAXCRTLTX.OLB/LIBRARY |
$ CC/NOPREFIX_LIBRARY_ENTRIES PROG1 $ LINK/NOSYSSHR PROG1, MYLIB/LIBRARY, ALPHA$LIBRARY:VAXCRTLX.OLB/LIBRARY |
VAXCRTL.OLB 内で接頭語の付いた HP C RTL シンボル参照は, STARLET.OLB で解決されます。
図 1-1 OpenVMS Alpha システムでの HP C RTL とのリンク
前へ | 次へ | 目次 | 索引 |