HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
以下の X/Open のファイル・ロック関数が追加されました。これらの関数を使用することで,ファイルのロックとアンロックを実行できます。また,スレッドを使ったプログラムの間で,アクセスの同期をとることができます。
flockfile ftrylockfile funlockfile clearerr_unlocked getc_unlocked getchar_unlocked feof_unlocked ferror_unlocked fgetc_unlocked fputc_unlocked putc_unlocked putchar_unlocked |
X/Open の標準に準拠した stat構造体の定義とそれに関連する定義が追加されました。これらの新しい定義を使うには,次の新しいマクロ定義を組み込んで,アプリケーションをコンパイルする必要があります。
_USE_STD_STAT
標準に準拠した stat構造体をサポートするために,次の新しいマクロも追加されています。
S_INO_NUM(ino)
S_INO_SEQ(ino)
S_INO_RVN(ino)
S_INO_RVN_RVN(ino)
S_INO_RVN_NMX(ino)
UNIX への移植性をサポートするために,次に示す,ファイル・システムの情報を返す X/Open の関数が追加されました。
statvfs fstatvfs |
ファイル・ステータス・フラグを設定したり,取得するためのコマンド・オプション F_SETFL と F_GETFL が,
fcntl関数に追加されました。
4.4.5 UNIX スタイルのパイプのサポート
UNIX への移植性を高めるために,C RTLのパイプの実装では,新しい機能論理名 DECC$STREAM_PIPE の制御のもとで,レコード入出力だけではなく,ストリーム入出力も使用するようになりました。
従来のレコード入出力を使用した動作がデフォルトです。
ストリーム入出力によるパイプのサポートを有効にするには,次のように,機能論理名 DECC$STREAM_PIPE に ENABLE を定義します。
$ DEFINE DECC$STREAM_PIPE ENABLE |
4.4.6 DECC$POPEN_NO_CRLF_REC_ATTR
popen関数でオープンされたパイプのレコード属性には, CR/LF キャリッジ制御が設定されています (fab$b_rat |= FAB$M_CR)。 UNIX システムでは,パイプに CR/LF が挿入されません。
UNIX 互換の動作をサポートするために,新しい機能論理名が追加されました。デフォルトの動作を無効にして,CR/LF キャリッジ制御がパイプのレコードに追加されないようにするには,DECC$POPEN_NO_CRLF_REC_ATTR に ENABLE を定義します。
$ DEFINE DECC$POPEN_NO_CRLF_REC_ATTR ENABLE |
ただし,この機能を有効にすると,キャリッジ・リターン文字を前提としている他の関数 (たとえば,
gets) が望ましくない動作をする可能性があります。
4.4.7 glob と globfree での 64 ビット・サポート
glob関数と globfree関数に, 64 ビット・サポートが追加されました。その結果,それぞれ 32 ビットのポインタと 64 ビットのポインタに対応する次の関数エントリ・ポイントが追加されました。
_glob32 _glob64 _globfree32 _globfree64 |
TCP/IP ソケット・ルーチンの socketpairが追加されました。
このルーチンは,接続状態のソケットのペアを作成します。 TCPIP$SOCKETPAIR 関数を使うためには,ベースとなる TCP/IP 製品が必要です。
4.5 DCE RPC での IEEE 浮動小数点型のサポート
DCE RPC for OpenVMS は,OpenVMS Alpha プラットフォームと OpenVMS I64 プラットフォームで,G_FLOAT と IEEE の両方の浮動小数点型をサポートするようになりました。 Alpha プラットフォームでのデフォルトの浮動小数点型は G_FLOAT のままです。 I64 プラットフォームでのデフォルトの浮動小数点型は IEEE_FLOAT です。
DCE RPC アプリケーションを開発するときにデフォルト以外の浮動小数点型を使用する場合には,アプリケーションの中で rpc_set_local_float_drep を呼び出す必要があります。
OpenVMS VAX プラットフォームの DCE RPC は,G_FLOAT 型だけをサポートしています。 |
以降の項では,OpenVMS I64 システムの OpenVMS Debugger の新機能について説明します。
4.6.1 Intel® Itanium® ハードウェアのサポート
OpenVMS I64 Debugger は,以下のハードウェア・レジスタをサポートしています。
OpenVMS I64 Debugger は,以下の言語で記述されたプログラムをサポートします。
BASIC
BLISS
C
C++
COBOL
IMACRO
Fortran
Intel Assembler (IAS)
Pascal
ヒープ・アナライザが OpenVMS I64 システムで使用可能になりましたが,起動方法は Alpha システムの場合と異なります。 OpenVMS I64 では,ヒープ・アナライザはデバッガから起動します。起動するには,デバッガ・コマンド行プロンプト (DBG>) で新しい起動コマンド START HEAP_ANALYZER を入力します。詳細は,『OpenVMS デバッガ説明書』の「ヒープ・アナライザ」の章を参照してください。
4.7 拡張ロック値ブロック
ロック値ブロックは,同期型のプロセス間/クラスタ内通信をサポートするための,OpenVMS ロック・マネージャの機能です。これまでは,ロック・マネージャを使っている OpenVMS アプリケーションでは,ロック操作で最大 16 バイトのロック値ブロック・データの格納と回復を行なうことができました。 OpenVMS Version 8.2 では,アプリケーションは,オプションで,ロック値ブロックに最大 64 バイトのデータを格納できるようになりました。
$GETLKI システム・サービスが変更されて,この新しい機能に必要な 2 つの新しいアイテム・コードが追加されました。アイテム・コードの用途は,次のとおりです。
詳細は,『OpenVMS Programming Concepts Manual』と『OpenVMS System Services Reference Manual』を参照してください。
4.8 Librarian ユーティリティとライブラリ・ルーチン (I64 のみ)
以降の項では,OpenVMS I64 システムの Librarian ユーティリティとライブラリ・ルーチンについて説明します。 OpenVMS Alpha システムでは,Librarian ユーティリティとライブラリ・ルーチンの変更はありません。
Librarian ユーティリティは,単に Librarian と呼ばれることもあります。また,ライブラリ・ルーチンは,ライブラリ・サービス,LBR ルーチン,または LBR$ ルーチンと呼ばれることがあります。 |
DCL コマンドの LIBRARY を使って Librarian ユーティリティを起動して (または,ライブラリ [LBR] ルーチンを使って),次に示す種類のライブラリを作成できます。
LIBRARY コマンドを実行すると OpenVMS Librarian ユーティリティが起動できます。このユーティリティでは,ライブラリ・モジュールの保守を行なうことができます。または,単にライブラリやモジュールについての情報を表示するために使うこともできます。 I64 Librarian ユーティリティには,Alpha Librarian と同様の機能が用意されていますが,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』に示す変更点と制限があります。
表 4-1 に,各 OpenVMS プラットフォームの Librarian ユーティリティで作成されるライブラリを示します。
| OpenVMS VAX | OpenVMS Alpha | OpenVMS I64 |
|---|---|---|
| VAX オブジェクト | Alpha オブジェクト | I64 オブジェクト |
| VAX 共有イメージ | Alpha 共有イメージ | I64 共有イメージ |
| Alpha オブジェクト | VAX オブジェクト | |
| Alpha 共有イメージ | VAX 共有イメージ | |
| マクロ | マクロ | マクロ |
| テキスト | テキスト | テキスト |
| ヘルプ | ヘルプ | ヘルプ |
この項では,OpenVMS I64 システムの Librarian ユーティリティの変更点と制限について説明します。
4.8.2.1 Librarian のデフォルトが Intel® Itanium® アーキテクチャになった
OpenVMS I64 Librarian ユーティリティにはアーキテクチャを指定するスイッチがありません。次の修飾子を指定すると,Librarian の処理対象は, OpenVMS ELF オブジェクト・ライブラリまたはイメージ・ライブラリになります。
/OBJECT---OpenVMS ELF オブジェクト・ライブラリの処理 (デフォルト)
/SHARE---OpenVMS ELF 共有イメージ・ライブラリの処理
OBJECT 修飾子と SHARE 修飾子のどちらも指定しなかった場合にデフォルトで作成されるライブラリの種類は,オブジェクト・ライブラリです。
4.8.2.2 /ALPHA 修飾子と /VAX 修飾子はサポートされない
/ALPHA 修飾子と /VAX 修飾子は,I64 Librarian ユーティリティではサポートしていません。この Librarian ユーティリティは,次の種類のライブラリだけを処理します。
MACRO
TEXT
HELP
ELF OBJECT
ELF SHARABLE IMAGE
I64 Librarian では,/REMOVE 修飾子の機能が拡張されました。拡張された形式では,シンボルのインスタンスをどのモジュールから削除するかを指定できるようになりました。
LIBRARY コマンドに対して,オブジェクト・ライブラリ内のグローバル・シンボル・テーブルから 1 つまたは複数のエントリを削除するように要求します。
/REMOVE=( symbol[:module] [, ... ] ) |
symbol
グローバル・シンボル・テーブルから削除するシンボル。
module
グローバル・シンボル・テーブルからシンボルのインスタンスを削除するモジュール。 UNIX スタイルの弱いシンボルと ELF グループ・シンボルをサポートするようになったため,シンボルは複数のモジュールで定義されている可能性があります。この拡張構文を使用すると,他のモジュールのシンボルのインスタンスはインデックスから削除せずに,特定のモジュールのシンボルだけをインデックスから削除することができます。
説明
複数のシンボルを指定する場合には,シンボルはコンマで区切り,リストを括弧で囲みます。シンボルはワイルドカード文字を使って指定することもできます。削除したグローバル・シンボルを表示させたいときには,/LOG 修飾子も指定する必要があります。
4.8.3 ライブラリ (LBR) ルーチンの変更点
以降の項で,OpenVMS I64 システムのライブラリ・ルーチンの変更点と制限について説明します。ここにリストされていないすべてのルーチンは,Alpha システムの場合と同じです (説明は,『OpenVMS Utility Routines Manual』にあります)。
4.8.3.1 新しく追加されたライブラリ・タイプ
LBR$OPEN ルーチンに,2 つの新しいライブラリ・タイプが追加されました。
LBR$C_TYP_ELFOBJ (9)---ELF オブジェクト・ライブラリであることを示す
LBR$C_TYP_ELFSHSTB (10)---ELF 共有イメージ・ライブラリであることを示す
さらに,LBR$OPEN ルーチンの次のライブラリ・タイプは,OpenVMS I64 ではサポートされません。
LBR$C_TYP_OBJ (1)---VAX オブジェクト・ライブラリであることを示す
LBR$C_TYP_SHSTB (5)---VAX 共有イメージ・ライブラリであることを示す
LBR$C_TYP_EOBJ (7)---Alpha オブジェクト・ライブラリであることを示す
LBR$C_TYP_ESHSTB (8)---Alpha 共有イメージ・ライブラリであることを示す
これらのライブラリ・タイプを使用して, OpenVMS Alpha または VAX のオブジェクト・ライブラリや共有イメージ・ライブラリを作成したり,オープンすることはできません。 |
OpenVMS Alpha オブジェクト,テキスト・モジュールなどは,シーケンシャル・アクセス・モジュールですが,ELF オブジェクト・モジュールは,本質的に,ランダム・アクセス・モジュールです。ランダムにアクセスできるように,1 つの新しいライブラリ・ルーチンが作成されました。このルーチンを使うと,ELF オブジェクト・モジュールがプロセスの P2 空間にマップされ,アプリケーションはランダム・アクセスのクエリを実行できるようになります。このマッピングから仮想アドレス空間を解放するために,このマッピングを削除するための別のライブラリ・ルーチンも作成されました。これらの新しいルーチン (LBR$MAP_MODULE と LBR$UNMAP_MODULE) は, ELF オブジェクト・ライブラリの処理にのみ使用できます。これらのルーチンは P2 空間を参照するため,エントリ・ポイントは 64 ビット・インタフェースです。
ELF オブジェクト・ファイルはランダムにアクセスされるものなので,次に示す操作は ELF オブジェクト・ライブラリに対しては実行できません。
LBR$GET_RECORD
LBR$SET_LOCATE
LBR$SET_MOVE
ライブラリにモジュールを挿入する操作はシーケンシャル操作なので, ELF オブジェクト・ライブラリに対して LBR$PUT_RECORD を実行することはできます。 ELF オブジェクト・モジュールはレコード単位にセグメント化されていないので,モジュールをライブラリに書き込む際に,LBR$PUT_RECORD を最初に呼び出すときに,ディスク上でのモジュールのサイズを指定する必要があります。
オブジェクト・モジュールを挿入するために LBR$PUT_RECORD を使用する方法を次の C コードの例に示します。
bufdesc->dsc$a_pointer = &p0_buffer ;
bytes_to_transfer = module_size ;
while ( bytes_to_transfer ) {
transfer = MIN ( bytes_to_transfer ,
ELBR$C_MAXRECSIZ ) ;
bufdesc->dsc$w_length = transfer ;
status = lbr$put_record ( library_index ,
& bufdesc ,
& txtrfa ,
module_size ) ;
if ( (status & 1) == 0 )
break ;
bytes_to_transfer -= transfer ;
bufdesc->dsc$a_pointer += transfer ;
} ;
if ( (status & 1) == 1 )
status = lbr$put_end ( library_index ) ;
|
LBR$PUT_RECORD を何度も呼び出さなくてよいように,新しいライブラリ・ルーチン LBR$PUT_MODULE が作成されました ( 第 4.8.4 項 を参照)。
4.8.4 ELF オブジェクト・ライブラリ用の新しいライブラリ (LBR) ルーチン
この項では,ELF オブジェクト・ライブラリ用の次の 4 つの新しいライブラリ・ルーチンについて説明します。
| 前へ | 次へ | 目次 | 索引 |