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


前へ 次へ 目次 索引


4.26.12 /MINICOPY を使用したシャドウ・セット・メンバのディスマウント

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: 
$ 

この問題は,今後のリリースで修正される予定です。


第 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) は,次の機能を盛り込むように拡張されました。

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 名への変換エラーが修正されました。

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 

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

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


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


前へ 次へ 目次 索引