標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
z/OS®UNIX | 両方 |
#define _XOPEN_SOURCE_EXTENDED 1
#define _ALL_SOURCE
#define _OPEN_MSGQ_EXT
#include <sys/types.h>
#include <sys/time.h>
#include <sys/msg.h>
int selectex(int nmsgsfds, fd_set *readlist,
fd_set *writelist,
fd_set *exceptlist,
struct timeval *timeout, int *ecbptr);
#define _OE_SOCKETS
#define _ALL_SOURCE
#define _OPEN_MSGQ_EXT
#include <sys/types.h>
#include <sys/time.h>
#include <sys/msg.h>
int selectex(int nmsgsfds, fd_set *readlist,
fd_set *writelist,
fd_set *exceptlist,
struct timeval *timeout, int *ecbptr);
メッセージ・キューを監視する場合 (X/Open ソケットのみ) は、_OPEN_MSGQ_EXT を定義する必要があります。
readlist、writelist、または exceptlist で 記述されないイベントを定義する ECB を使用できるようにすることによって、selectex() 関数で、select() 呼び出しへの拡張が 提供されます。
ファイル/ソケットおよびメッセージ・キューの読み取り、書き込みが行われたか、または例外処理条件が保留になっている かどうかを調べるために、タイムアウトが起こるまで、あるいは ECB が記入されるまで、selectex() 呼び出し は、ファイル/ソケットおよびメッセージ・キューのアクティビティーを監視します。
最初の (または唯一の) ECB のストレージ・キーが、呼び出し側の PSW キーと一致する場合、カーネルは呼び出し側の PSW キー内で待機を実行します。そうでなければ、カーネルは TCB キー (TCBPFK) 内で待機を実行します。ただし、呼び出し元がキー 0 内で実行されている場合、カーネルはストレージ・キーに関係なくキー 0 内で待機を実行します。
リストには、最大 1013 ECB までポインターを入れることができます。リストの最後のポインターの高位ビットは、'1'B に設定する 必要があります。
C++ の特殊な動作: C++ でこの関数を使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを 使用する必要があります。
値 -1 は、エラーについて調べる必要があるエラー・コードを示します。値 0 は、時間制限が満了であること、または ECB が記入される ことを示します。
戻り値が 0 より大きい場合には、高位 16 ビットで メッセージ・キューが指定され、下位 16 ビットで記述子数が指定されるので、この戻り値は nmsgsfds と類似しています。これらの値は、読み取り、書き込み、および例外のそれぞれの基準を満たす合計値を示します。記述子または メッセージ・キューは、複数の指定基準を満たす場合には、数回カウントされる場合があることに注意してください。メッセージ・キューの戻り値が値 32767 を超えていても、32767 だけが報告されることになります。これは、戻り値が負の値にならないようにするためです。ファイル/ソケット記述子の戻り値が 65535 を超えていても、65535 だけが報告されることになります。