日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS V7.3-2
ライブラリ

タイトルページ
目次
まえがき
第 1 章:インストールに関する注意事項
第 2 章:関連製品に関する注意事項
第 3 章:一般ユーザ向けの注意事項
第 4 章:システム管理に関する注意事項
第 5 章:プログラミングに関する注意事項
第 6 章:ハードウェアに関する注意事項
付録 A:リタイア製品情報
付録 B:インターロックされたメモリ命令の使用
索引
PDF
OpenVMS ホーム
OpenVMS Alpha | HPE 日本

OpenVMS Alpha
V7.3-2 リリース・ノート【翻訳版】


目次 索引

第 5 章
プログラミングに関するリリース・ノート

この章では,OpenVMS システムでのアプリケーション・プログラミングとシステム・プログラミングに関する注意事項を説明します。

5.1 Backup API: ジャーナリング・コールバック・イベントの制限事項

永続的な制限事項

アプリケーションがジャーナリング・イベントのいずれかに対してコールバック・ルーチンを登録する場合は,すべてのジャーナリング・コールバック・イベントに対してコールバック・ルーチンを登録しなければなりません。ジャーナリング・コールバック・イベントは次のとおりです。

BCK_EVENT_K_JOURNAL_OPEN
BCK_EVENT_K_JOURNAL_WRITE
BCK_EVENT_K_JOURNAL_CLOSE

コールバック・ルーチンの登録の詳細については,『OpenVMS Utility Routines Manual』の Backup API に関する章を参照してください。

5.2 C プログラム: case=sensitive を設定したコンパイル

永続的な制限事項

case=sensitiveを設定して C プログラムをコンパイルすると, C プログラム内に .h ファイル・タイプ (小文字の「h」) の #include ファイルは,検出および実行されません。また,システムの #include ファイルが他の .h ファイル・タイプの #include ファイルを使用している場合,この #include ファイルは検出されず,エラーが出力されます。

この動作を防ぐには,大文字と小文字を区別しないように設定します。 case=sensitiveを設定する必要がある場合は, C プログラム内の #include ファイルにファイル・タイプを指定しないか ( 例 #include <stdio>),または大文字の H ファイル・タイプを指定してください ( 例 #include <stdio.H>)。

ただし,stdlib.h などのシステム #include ファイルが .h ファイル・タイプの #include ファイルを使用している場合は,エラーとなるので注意してください。

5.3 C 実行時ライブラリ

ここでは,C 実行時ライブラリ (RTL) の変更や修正について説明します。

5.3.1 未定義シンボル GETADDRINFO_COMPAT43 の修正

V7.3-2

状況によっては,OpenVMS リンカが GETADDRINFO_COMPAT43 シンボルを未定義と判断することがありました。この問題は修正されました。

5.3.2 一部のソケット・ルーチンによる 64 ビット・ポインタのサポート

V7.3-2

次のソケット・ルーチンは, 64 ビット・ポインタをサポートしていませんでしたが,サポートするようになりました。


accept 
getpeername 
getsockname 
inet_ntop 
inet_pton 



5.3.3 fwrite 関数は不適切なレコードをファイルに書き込まなくなった

V7.3-2

OpenVMS Version 7.3-1 では,ファイルで定義されているレコード・サイズよりも短い固定長レコードを C RTL が書き込むように,修正が行われました。この場合,C RTL はレコードにゼロをパディングし,レコード・サイズが,そのファイルで定義されている最大レコード・サイズになるようにします。

これにより動作が変わるため,この動作を制御するための機能論理名を追加しなければなりませんでした。現在は,この機能論理名が追加されています。この新しい機能論理名 DECC$WRITE_SHORT_RECORDS は,固定長ファイルへのレコードの書き込み (デフォルト動作) という従来の方法をサポートし, fwrite関数に対する上記の変更もサポートしています。

DECC$WRITE_SHORT_RECORDS を有効にしている場合,短いサイズのレコードはゼロでパディングされ,レコードがレコード境界に合わせられます。

DECC$WRITE_SHORT_RECORDS を無効にしている場合,レコード書き込みの従来の動作が実行されます。これは,省略時の動作です。

5.3.4 FILE_TYPE マクロが <stdio.h> ヘッダから削除された

V7.3-2

<stdio.h>ヘッダ・ファイルに,非標準のマクロ FILE_TYPE が含まれていました。名前空間の汚れをなくすために,このマクロが <stdio.h>ヘッダ・ファイルから削除されました。

5.3.5 tm_t 構造体が <time.h> ヘッダから削除された

V7.3-2

<time.h>ヘッダ・ファイルには,非標準の構造体 tm_tの定義が含まれていました。名前空間の汚れを無くすために,この構造体定義が <time.h>ヘッダ・ファイルから削除されました。

5.3.6 <ftw.h> ヘッダ・ファイルがローカル時間関数 ftw 互換になった

V7.3-2

最近のバージョンの C RTL と, C コンパイラ Version 6.5 で用意されているヘッダ・ファイルを一緒に使用し, _VMS_V6_SOURCE マクロが定義された状態でコンパイルを行った場合, ftw関数のローカル時間バージョンが誤って省略時の関数となります。

回避方法:

この動作は,以前のバージョンの C RTL とは互換性がなかったため,同じ状況で UTC ベースの ftw関数が省略時の関数になるように戻されました。新しいマクロ __LOCAL_TIME_FTW が追加され, UTC ベースの ftwとローカル時間ベースの ftwのどちらを使用するかを制御できるようになりました。ローカル時間の ftwを使用するには, _VMS_V6_SOURCE マクロと _DECC_V4_SOURCE マクロのほかに, /DEFINE=__LOCAL_TIME_FTW を指定してコンパイルしなければなません。

5.3.7 64 ビット iconv() の不完全なサポートが削除された

V7.3-2

64 ビット iconvの不完全なサポートが,誤って Spring 2002 ECO キットと OpenVMS Version 7.3-1 に入れられました。これにより,一部の状況 (STARLET.OLB とのリンク) 下では, 64 ビット iconvがサポートされているかのような誤解を与えました。このインタフェースは今までサポートされたことがなく,現在もサポートされていません。

回避方法

64 ビット iconvは機能せず,サポートもされていないため, DECC$_ICONV64 が削除されました。

/POINTER=LONG を使用してコンパイルした場合は,次のようなコンパイラ・エラー・メッセージが出力されるようになりました。


%CC-W-PTRMISMATCH, In this statement, the referenced type of the 
pointer value "(char ...)0" is "long pointer to char", which is 
not compatible with "short pointer to char". 



5.3.8 警告が出力された状態でリンクされたイメージで dlsym 関数が失敗しなくなった

V7.3-2

以前, dlsym関数は,コンパイラ警告が出力されたモジュールとリンクされた共有イメージを起動できませんでした。この問題が修正されました。

5.3.9 dlsym 関数が小文字の名前を認識するようになった

V7.3-2

以前は,小文字を含むライブラリ・シンボルを, dlsym関数でロードすることはできませんでした。この問題が修正されました。

一般的には,ライブラリを動的にロードする関数 ( dlopendlsymdlclosedlerror) は,次の機能を盛り込むように拡張されました。

  • 大文字,小文字が混在するシンボル名を含むライブラリのサポート

  • 完全なファイル・パスを dlopenに渡す機能

  • 指定されたライブラリ名の検証



5.3.10 catopen 関数が UNIX® スタイルのパス名をサポートするようになった

V7.3-2

以前, catopen関数は,スラッシュ (/) を含む UNIX スタイルのパス名を受け入れませんでした。この問題が修正されました。つまり,パスにスラッシュ文字が含まれている場合,スラッシュ文字は UNIX スタイルのディレクトリ名として扱われ, OpenVMS フォーマットに変換されるようになりました。

5.3.11 メモリ管理関数がリエントラントになった

V7.3-2

以前,メモリ・マップ関数 mmapmunmapmsync,および mprotectは,リエントラントではありませんでした。現在はリエントラントです。

5.3.12 ファイル指定の山括弧が正しく認識されるようになった

V7.3-2

以前は,OpenVMS Version 7.3-1 上,または ECO キット VMS73_ACRTL-V0200 または VMS722_ACRTLV0100 のインストール後,山括弧を使用したディレクトリ定義が正しく処理されず,ファイルやディレクトリのパスに関連する各種のエラーが発生することがありました。この問題が修正されました。

5.3.13 sleep と usleep の競合状態の修正

V7.3-2

以前,アップコールが有効になっているマルチスレッド・アプリケーションで sleep関数と usleep関数を同時に使用すると,アプリケーションがハングアップすることがありました。この問題が修正されました。

5.3.14 UNIX 名から OpenVMS 名への変換エラーの修正

V7.3-2

以下の,UNIX 名から OpenVMS 名への変換エラーが修正されました。

  • decc$translate_vms関数は,ファイル名 a.b.c を変換できませんでした。 ODS-5 サポートは,RMS から返却された形式の名前だけを扱います。 RMS は,ファイル a.b.c を a^.b.c として報告しますが,これは正常に変換されています。

  • decc$translate_vms関数は,ファイル名 ^% を,誤って % ではなく ? と変換していました。

  • decc$to_vms関数は,ファイル名 % を,誤って OpenVMS 名 ^% ではなく,% に変換していました。

  • decc$translate_vms関数は,名前 [crtl.][] を変換できませんでした。この関数は,正しく [] を現在のディレクトリに置き換えるようになりました。



5.3.15 TZ が不正なときの tzset の動作の変更

V7.3-2

以前は,TZ 環境変数の値が不正だった場合, tzset関数は不正な値を,グリニッジ標準時 (GMT) のコロン (:) と解釈していました。これにより,OpenVMS は世界標準時 (UTC) で表現されているすべてのファイル時刻を, GMT で記録されているものと解釈していました。

この状況は,OpenVMS Version 7.3-2 で変更されました。 TZ 値が不正な場合は,/SYS$LOCALTIME が使用されるようになりました。

Tru64 UNIX システムでは,TZ 値が不正な場合, tzset/etc/zoneinfo/localtimeファイルを使用します。 OpenVMS で /etc/zoneinfo/localtimeと同等なものは,システム論理名 SYS$LOCALTIME です。 OpenVMS の動作は,Tru64 UNIX の動作と同じになりました。

5.3.16 シーク不能ファイルに対して pread または pwrite を行った場合に,正しくエラーとして処理されるようになった

V7.3-2

X/Open® 仕様では,シーク不能なファイルに対して preadpwriteを実行したときには,エラーとすることになっています。ただし以前は, pread関数と pwrite関数の C RTL では,シーク不能なファイルに対応するファイル記述子 (FD) に対して,エラーを返しませんでした。代わりに,offset パラメータが無視され,操作が通常の読み取り,書き込みとして扱われていたため,この pread呼び出しや pwrite呼び出しは成功していました。

pread関数と pwrite関数が変更され,ファイルがシーク可能でない場合,エラー・コード ESPIPE が返され, FD がパイプや FIFO などのシーク不能なファイルに関連付けられていることを示すようになりました。

5.3.17 オープン・ファイルの削除が機能論理名によって制御されるようになった

V7.3-2

OpenVMS Version 7.3-1 では,C RTL の動作が変更され, lib$delete_file 修飾子 LIB$M_FIL_IGNORE_ACCESS をサポートしているシステムで remove関数を呼び出すことができ,他のプロセスが排他アクセスでオープンしているファイルのリンクが解除されたことが分かるようになりました。この動作は POSIX に準拠していますが,既存の動作が予期せずに変更されることがないよう,機能論理名により制御する必要があります。

OpenVMS Version 7.3-2 では, DECC$ALLOW_REMOVE_OPEN_FILES という C RTL 機能論理名を追加して,この問題が修正されました。この機能論理名が有効になっている場合, POSIX 準拠の remove関数の動作が許可されます。この機能論理名が有効になっていない場合,以前の動作 (削除の禁止) が行われます。

5.3.18 fstat 関数がディスク・アクセス日が有効かどうかをチェックするようになった

V7.3-2

以前,DECC$EFS_FILE_TIMESTAMPS が有効でアクセス日オプションがオフになっている ODS-5 ディスクでは, fstat関数は, st_mtimeフィールドと同じ値を返す必要があるときに, st_atimeフィールドに実際のアクセス時間を返していました。

fstat関数は,ディスク・アクセス日が有効になっているかどうかをチェックするようになりました。

5.3.19 <time.h> や <signal.h> をインクルードするときの,構造体再定義の問題

V7.3-2

直接または間接的に <time.h><signal.h>ヘッダ・ファイルをインクルードするプログラムでは,構造体の再定義が問題になることがあります。 OpenVMS Version 7.3-2 より前のバージョンでは,マーカ・シンボル _TIMESPEC_T_ を使用して, timespec構造体と timespec_t型がすでに定義されていることを示していました。 <time.h>ヘッダ・ファイルまたは <signal.h>ヘッダ・ファイルが, OpenVMS Version 7.3-2 より前のプロトコルに準拠している timespec構造体定義の にインクルードされている場合,コンパイラは REDEFSTRUCT エラーを出力します。

この問題を解決するには,新しいマーカ・シンボル __TIMESPEC および __TIMESPEC_T を使用して, timespec構造体と timespec_t型が以前に定義されていることを示すように,プログラムを修正します。

Version 7.3-2 より前の定義:

OpenVMS Version 7.3-2 より前のバージョンでは, <timers.h>ヘッダ・ファイルには次の定義が含まれています。


#ifndef _TIMESPEC_T_ 
#   define _TIMESPEC_T_ 
    typedef struct timespec { 
        unsigned long       tv_sec;         /* seconds */ 
        long                tv_nsec;        /* nanoseconds */ 
    } timespec_t; 
#endif 

この定義では, timespec構造体と timespec_t型の再定義を避けるために,マーカ・シンボル _TIMESPEC_T_ が使用されています。

Version 7.3-2 での定義:

OpenVMS Version 7.3-2 では,次の定義を含むように, <timers.h>ヘッダ・ファイルが変更されました。


#ifndef _TIMESPEC_T_ 
   #   define _TIMESPEC_T_ 
 
#    ifndef __TIMESPEC 
#       define __TIMESPEC 
        struct timespec { 
            unsigned long       tv_sec;     /* seconds */ 
            long                tv_nsec;    /* nanoseconds */ 
        }; 
#    endif 
 
#    ifndef __TIMESPEC_T 
#       define __TIMESPEC_T 
        typedef struct timespec timespec_t; 
#    endif 
 
#endif 

この変更により,次の事項が実現されます。

  • 構造体定義と,typedef 定義が分離されました。

  • timespec_t型と timespec構造体の両方が定義されていることを示す,マーカ・シンボル _TIMESPEC_T_ も引き続き利用できます。

  • 新しい 2 つのマーカ・シンボル __TIMESPEC_T と __TIMESPEC が追加されました。これらのシンボルはそれぞれ, timespec_t型と timespec構造体が定義されていることを示します。

さらに,標準のヘッダ・ファイル <signal.h><time.h>が,次の構造体定義を含むように変更されました。


#   if (!defined __TIMESPEC && !defined _TIMESPEC_T_) 
#     define __TIMESPEC 
      struct timespec { 
        unsigned long       tv_sec;         /* seconds */ 
        long                tv_nsec;        /* nanoseconds */ 
      }; 
#   endif 



5.3.20 論理名混在の検索リストが動作するようになった

V7.3-2

OpenVMS Version 7.1-2 では,最上位の論理名と最上位でない論理名が混在した検索リストを使用しても動作しましたが, OpenVMS Version 7.2-2 以降ではエラーが発生することがありました。

OpenVMS Version 7.3-2 からは,新しい機能論理名が追加され,この問題が解決されました。 DECC$NO_ROOTED_SEARCH_LISTS 機能論理名は, decc$to_vms関数が検索リストの論理名を解決する方法を制御します。

decc$to_vms関数は,UNIX 形式のパス文字列を評価し,論理名となる 1 番目の要素を検出する際に,次の処理を行います。

  • 最上位の論理名またはデバイスの場合,この関数は論理名に ":[000000]" を付加します。
    たとえば,LOG1 が最上位の論理名の場合 ($ DEFINE LOG1 [directory.]), /LOG1/filename.ext は LOG1:[000000]filename.ext に変換されます。

  • 最上位でない論理名の場合,この関数は,論理名にコロン (:) だけを付加します。
    たとえば,LOG2 が最上位でない論理名の場合 ($ DEFINE LOG2 [directory]), /LOG2/filename.ext は LOG2:filename.ext に変換されます。

  • 1 番目の要素が検索リスト論理名の場合,変換は,検索リスト内の 1 番目の要素を評価して,以前に説明したようにパスを変換することにより進められます。

上記の 3 つのケースでは,予測可能な,期待どおりの結果が得られます。

1 番目の要素が,最上位の論理名と最上位でない論理名が混在した検索リストの場合,以前の説明のとおりにパスを変換すると,次の点で,古いバージョンの OpenVMS (Version 7.3-1 より前) とは異なる動作になることがあります。

  • OpenVMS Version 7.3-1 より前の場合,論理名の内容に関係なく, decc$to_vms関数はコロン (:) だけを付加していました。この処理により,最上位の論理名と最上位でない論理名が混在した検索リストの場合,期待どおりの結果が得られます。

  • OpenVMS Version 7.3-1 およびそれ以降の場合,混在している検索リストの 1 番目の要素が最上位の論理名の場合, decc$to_vmsは,論理名に :[000000] を付加します。その結果,OpenVMS の Version 7.3-1 より前のリリースとは異なる動作になります。

DECC$NO_ROOTED_SEARCH_LISTS は, decc$to_vms関数が検索リスト論理名を解決する方法を制御します。また Version 7.3-1 より前の動作に戻すこともできます。

DECC$NO_ROOTED_SEARCH_LISTS を有効にすると,次の動作が行われます。

  • ファイル指定内で論理名が検出され,その論理名が検索リストの場合, OpenVMS ファイル指定を作成するときにコロン (:) が付加されます。

  • この論理名が検索リストでない場合,動作は DECC$NO_ROOTED_SEARCH_LISTS が無効の場合と同じです。

この機能論理名を有効にすると,検索リスト論理名の動作が, Version 7.3-1 よりも前の状態になります。

DECC$NO_ROOTED_SEARCH_LISTS を無効にすると,次の動作が行われます。

  • ファイル指定内で論理名が検出され,その論理名が最上位の論理名 (または,1 番目の要素が最上位論理名である検索リスト) の場合, OpenVMS ファイル指定を作成するときに,:[000000] が付加されます。

  • その論理名が最上位でない論理名 (または, 1 番目の要素が最上位でない論理名の検索リスト) の場合,コロン (:) だけが付加されます。

この機能論理名を無効にすると, OpenVMS Version 7.3-1 およびそれ以降の動作になります。


目次 索引

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