前へ | 次へ | 目次 | 索引 |
V7.3
OpenVMS Cluster 構成では,クライアント・システムでシャドウ・セットのメンバのディスマウントに, /MINICOPY 修飾子を使用して DISMOUNT コマンドを実行すると, DISMOUNT コマンドが失敗することがあります。
最初の DISMOUNT コマンドが失敗した場合,次の例のようにコマンドを繰り返します。
$ SHOW DEVICE DSA5555 Device Device Error Volume Free Trans Mnt Name Status Count Label Blocks Count Cnt DSA5555: Mounted 0 $80$DKA107: 7994646 1 18 $80$DKA107: (WILD3) ShadowSetMember 0 (member of DSA5555:) $80$DKA302: (WILD3) ShadowSetMember 0 (member of DSA5555:) $80$DKA303: (WILD3) ShadowSetMember 0 (member of DSA5555:) $ $ $ DISMOUNT/POLICY=MINICOPY $80$DKA302: %DISM-W-CANNOTDMT, $80$DKA302: cannot be dismounted %DISM-F-SRCMEM, only source member of shadow set cannot be dismounted $ $ $ DISMOUNT/POLICY=MINICOPY $80$DKA302: $ |
この問題は,今後のリリースで修正される予定です。
この章では,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関数でロードすることはできませんでした。この問題が修正されました。
一般的には,ライブラリを動的にロードする関数 ( dlopen, dlsym, dlclose, dlerror) は,次の機能を盛り込むように拡張されました。
5.3.10 catopen 関数が UNIX® スタイルのパス名をサポートするようになった
V7.3-2
以前,
catopen関数は,スラッシュ (/) を含む UNIX スタイルのパス名を受け入れませんでした。この問題が修正されました。つまり,パスにスラッシュ文字が含まれている場合,スラッシュ文字は UNIX スタイルのディレクトリ名として扱われ, OpenVMS フォーマットに変換されるようになりました。
5.3.11 メモリ管理関数がリエントラントになった
V7.3-2
以前,メモリ・マップ関数
mmap,
munmap,
msync,および
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 名への変換エラーが修正されました。
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® 仕様では,シーク不能なファイルに対して preadや pwriteを実行したときには,エラーとすることになっています。ただし以前は, 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型が以前に定義されていることを示すように,プログラムを修正します。
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_ が使用されています。
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 |
この変更により,次の事項が実現されます。
さらに,標準のヘッダ・ファイル <signal.h>と <time.h>が,次の構造体定義を含むように変更されました。
# if (!defined __TIMESPEC && !defined _TIMESPEC_T_) # define __TIMESPEC struct timespec { unsigned long tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; # endif |
前へ | 次へ | 目次 | 索引 |