日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

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

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


目次 索引

第 1 章
はじめに

ISO/ANSI C 標準では,ANSI C の実装で提供される関数,マクロ,関連する型を登録したライブラリを定義しています。『HP C Language Reference Manual』では,すべての HP C プラットフォームに共通の ANSI 準拠のライブラリの機能について説明しています。『HP C ランタイム・ライブラリ・リファレンス・マニュアル』では,これらのルーチンについてさらに詳しく説明し, OpenVMS 環境でこれらのルーチンを使用する方法についても説明します。また,OpenVMS システムで提供される追加のヘッダ・ファイル,関数,型,マクロについても説明します。

すべてのライブラリ関数はヘッダ・ファイルで宣言されます。ヘッダ・ファイルの内容をプログラムで使用できるようにするには, #includeプリプロセッサ・ディレクティブを使用してヘッダ・ファイルを取り込みます。次の例を参照してください。


    #include <stdlib.h>    

各ヘッダ・ファイルには,関連する関数の集合に対する関数プロトタイプが格納されており,これらの関数を使用するのに必要な型とマクロを定義しています。

OpenVMS Alpha システムまたは I64 システムでヘッダ・ファイルの一覧を表示するには,次のコマンドを使用します。


$ LIBRARY/LIST SYS$LIBRARY:SYS$STARLET_C.TLB 
$ LIBRARY/LIST SYS$LIBRARY:DECC$RTLDEF.TLB 
$ DIR SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF]*.H; 
$ DIR SYS$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 Version 3.2 環境をサポートするものであり, HP C では使用されません。

関数定義自体がヘッダ・ファイルに含まれているわけではなく,これらの定義は OpenVMS オペレーティング・システムに付属している HP C Run-Time Library (RTL) に格納されています。 HP C RTL を使用する前に,次のことを十分理解しておく必要があります。

  • リンク・プロセス

  • マクロ置換プロセス

  • 関数定義と関数呼び出しの違い

  • 正しいファイル指定の形式

  • OpenVMS 固有の入出力 (I/O) の方法

  • HP C for OpenVMS の拡張機能と非標準機能

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 および HP C++ を使用すれば,共用可能イメージに対してプログラムをリンクするときにオプション・ファイルを定義する必要はありません。RTL 共用可能イメージに対するリンクは, VAX C の場合よりはるかに簡単になりました。実際に,このリンクは HP C RTL へのリンクのデフォルト方式になっています。

HP C RTL にリンクする場合, LNK$LIBRARY 論理名を定義する必要はありません。実際には,共用可能イメージとのリンクの方が HP C RTL オブジェクト・ライブラリとのリンクより便利であるため, LNK$LIBRARY の割り当ては解除する必要があります。

HP C RTL とのリンクに関する補足情報については,OpenVMS, HP C ,HP C++ のリリース・ノートを参照してください。

1.2 Alpha および I64 システムでの RTL リンク・オプション (Alpha, I64)

ここでは,OpenVMS Alpha システムと I64 システムで HP C および HP C++ プログラムを HP C RTL とリンクする複数の方法について説明します。

1.2.1 共用可能イメージとのリンク

ほとんどのリンクでは,ALPHA$LIBRARY ディレクトリ (Alpha only) または IA64$LIBRARY (I64 only) ディレクトリ内の HP C RTL 共用可能イメージ DECC$SHR.EXE を使用します。

共用可能イメージ VAXCRTL.EXE および VAXCRTLG.EXE は, OpenVMS Alpha システムと I64 システムにはありません。唯一の C RTL 共用可能イメージは ALPHA$LIBRARY:DECC$SHR.EXE (Alpha only) または IA64$LIBRARY:DECC$SHR.EXE (I64 only) であり,リンカは IMAGELIB.OLB を通じて自動的にこのイメージを検索します。

VAXCRTL*.EXE は Alpha システムと I64 システムに存在しないため,次のことに注意する必要があります。

  • VAXCRTL*.EXE イメージに対する参照を除外するために,既存の VAX C リンク・プロシージャを変更する必要があります。 IMAGELIB.OLB はリンカによって自動的に検索されるため, DECC$SHR.EXE を明示的に参照する必要はありません ( 『OpenVMS Linker Utility Manual』を参照)。

  • DECC$SHR.EXE は接頭語の付いたユニバーサル・シンボル (DECC$ から始まるシンボル) だけをエクスポートするので,正しくリンクするには,使用するすべての HP C RTL エントリ・ポイントに対して接頭語を付ける必要があります。
    ANSI C 標準に定義されている HP C RTL 関数だけを使用する場合は,すべてのエントリ・ポイントに接頭語が付加されます。
    ANSI C 標準に定義されていない HP C RTL 関数を使用する場合は,次のいずかの方法でコンパイルすることにより,接頭語を付加する必要があります。

    • /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES 修飾子を指定してコンパイルする方法。

    • /STANDARD=VAXC または /STANDARD=COMMON 修飾子を指定してコンパイルする方法。デフォルトは /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES です。

共用可能イメージに対してリンクするには,LINK コマンドを使用します。次の例を参照してください。


    $ LINK PROG1    

リンカは自動的に IMAGELIB.OLB から DECC$SHR.EXE を検索し,すべての C RTL 参照を解決します。

1.2.2 オブジェクト・ライブラリとのリンク (Alpha only)

OpenVMS Alpha システムの HP C RTL オブジェクト・ライブラリは, /PREFIX=ALL を使用せずにコンパイルされたプログラムをリンクする場合にだけ使用します。これらのオブジェクト・ライブラリは,OpenVMS I64 システムには存在しない点に注意してください。

OpenVMS Alpha システムでは, HP C RTL は ALPHA$LIBRARY ディレクトリに次のオブジェクト・ライブラリを提供します。

  • VAXCCURSE.OLB

  • VAXCRTLD.OLB

  • VAXCRTLT.OLB

  • VAXCRTL.OLB

  • VAXCRTLX.OLB

  • VAXCRTLDX.OLB

  • VAXCRTLTX.OLB

Curses 関数へのアクセスを可能にするオブジェクト・ライブラリ VAXCCURSE.OLB には,接頭語のないエントリ・ポイントが含まれており,これらのエントリ・ポイントは接頭語の付いた適切なエントリ・ポイントに変換されます。

オブジェクト・ライブラリ VAXCRTL.OLB,VAXCRTLD.OLB,VAXCRTLT.OLB, VAXCRTLX.OLB,VAXCRTLDX.OLB,VAXCRTLTX.OLB には,使用するオブジェクト・ライブラリに指定されている浮動小数点型に応じて,適切な接頭語の付いたエントリ・ポイントに変換される接頭語のないエントリ・ポイントも含まれています。

  • VAXCRTL.OLB には,すべての HP C RTL ルーチン名エントリ・ポイントの他に, VAX G-floating 倍精度浮動小数点エントリ・ポイントも含まれています。

  • VAXCRTLD.OLB には,VAX D-floating 倍精度浮動小数点エントリ・ポイントの限定サポートが含まれています。

  • VAXCRTLT.OLB には, IEEE T-floating 倍精度浮動小数点エントリ・ポイントが含まれています。

  • VAXCRTLX.OLB には,G_floating のサポートと, /L_DOUBLE_SIZE=128 コンパイラ修飾子のサポートが含まれています。

  • VAXCRTLDX.OLB には,D_floating のサポートと, /L_DOUBLE_SIZE=128 コンパイラ修飾子のサポートが含まれています。

  • VAXCRTLTX.OLB には,IEEE T_floating のサポートと, /L_DOUBLE_SIZE=128 コンパイラ修飾子のサポートが含まれています。

/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 は,これらの例を図でわかりやすく示しています。

  1. ほとんどの場合,共用可能イメージに対するリンクだけが必要です。


    $ CC/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES PROG1
    $ LINK PROG1
    


    リンカは IMAGELIB.OLB から自動的に DECC$SHR.EXE を検索します。

  2. オブジェクト・ライブラリだけを使用する場合 ( たとえば,特権付きコードを作成するためや配布を簡単にするため ), LINK コマンドの /NOSYSSHR 修飾子を使用します。


    $ CC/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES PROG1
    $ LINK/NOSYSSHR PROG1
    


    ユーザ・プログラム内で接頭語の付いた RTL シンボル参照は,STARLET.OLB に含まれる HP C RTL オブジェクト・ライブラリで解決されます。

    注意

    • /NOSYSSHR 修飾子を使用して, HP C プログラムを HP C RTL オブジェクト・ライブラリに対してリンクする場合,未定義グローバルを含まずにすでにリンクされているアプリケーションでは, CMA$TIS シンボルの未定義グローバルが発生することがあります。これらの未定義グローバルを解決するには,次の行をリンク・オプション・ファイルに追加します。


          SYS$LIBRARY:STARLET.OLB/LIBRARY/INCLUDE=CMA$TIS    
      

    • /NOSYSSHR 修飾子を使用してリンクしたプログラムで,動的に起動されるイメージ内に常駐するルーチンを呼び出し,そのルーチンが異常終了状態を示す値を返した場合, errnoは ENOSYS に設定され, vaxc$errnoは C$_NOSYSSHR に設定されます。 C$_NOSYSSHR に対応するエラー・メッセージは "Linking /NOSYSSHR disables dynamic image activation" です。たとえば,ソケット・ルーチンを呼び出すプログラムを, /NOSYSSHR を使用してリンクすると,このような状況が発生します。

  3. (Alpha only) OpenVMS Alpha システムでは,接頭語を付加しないように設定してコンパイルした場合, C RTL 関数の別の実装を提供するオブジェクト・ライブラリを使用するには, VAXC*.OLB オブジェクト・ライブラリを使用する必要があります。この場合,コンパイルとリンクは次のように行います。


    $ 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 
    

  4. (Alpha only) 例 2 と例 3 を組み合わせて,オブジェクト・ライブラリ ( 特権付きコードを作成するためや配布を簡単にするため ) だけを使用し, C RTL 関数を提供するオブジェクト・ライブラリを使用しなければならないことがあります。この場合,コンパイルとリンクは次の方法で行います。


    $ 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 と I64 での HP C RTL とのリンク




VAX C RTL と HP C RTL はどちらも OpenVMS VAX システムに共存できます。 VAX C RTL は既存の VAX C アプリケーションをサポートします。 HP C RTL は ANSI 準拠の HP C と HP C++ をサポートし,OpenVMS 環境の他のコンポーネントもサポートします。 HP C RTL では,スレッド・セーフと性能向上のための機能も提供されます。

VAX C で開発されたアプリケーションは,今後も VAX C RTL を使用します。しかし,代わりに HP C RTL を使用するように VAX C アプリケーションを再リンクすることもできます。このようにすると, HP C RTL の新機能を利用することができ, VAX C RTL と HP C RTL の両方を統合した複雑なアプリケーションで相互運用性に関する問題を解決することができます。 HP C RTL を使用するために再リンクされる既存のアプリケーションは, VAX C RTL と HP C RTL の動作の違いによって問題が発生しないかどうか,注意深くテストしておく必要があります。詳細については,該当する HP C のリリース・ノートと OpenVMS のリリース・ノートを参照してください。

ここでは,OpenVMS VAX システムで HP C プログラムを HP C RTL および VAX C RTL とリンクするための複数の方法について説明します。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項