selectex() - ファイルまたはソケットおよびメッセージ・キューに関するアクティビティーのモニター

標準

標準/拡張機能 C/C++ 依存項目
z/OS®UNIX 両方  

形式

X/Open:
#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 を定義する必要があります。

機能説明

readlistwritelist、または exceptlist で 記述されないイベントを定義する ECB を使用できるようにすることによって、selectex() 関数で、select() 呼び出しへの拡張が 提供されます。

ファイル/ソケットおよびメッセージ・キューの読み取り、書き込みが行われたか、または例外処理条件が保留になっている かどうかを調べるために、タイムアウトが起こるまで、あるいは ECB が記入されるまで、selectex() 呼び出し は、ファイル/ソケットおよびメッセージ・キューのアクティビティーを監視します。

最初の (または唯一の) ECB のストレージ・キーが、呼び出し側の PSW キーと一致する場合、カーネルは呼び出し側の PSW キー内で待機を実行します。そうでなければ、カーネルは TCB キー (TCBPFK) 内で待機を実行します。ただし、呼び出し元がキー 0 内で実行されている場合、カーネルはストレージ・キーに関係なくキー 0 内で待機を実行します。

詳細は、select() を参照してください。
パラメーター
説明
nmsgsfds
検査を行うメッセージ・キュー数およびファイルまたはソケット記述子数 (このパラメーター、および以下のようなその他のパラメーターの十分な 説明については、select() を参照してください)。
注: この関数は、65535 以下 の記述子番号に限定されます。
readlist
fd_set 型、メッセージ・キュー ID の配列のポインター、または読み取りのために検査する記述子およびメッセージ・キューを 指定する sellist 構造体。
writelist
fd_set 型、メッセージ・キュー ID の配列のポインター、または書き込みのために検査する記述子およびメッセージ・キュー を指定する sellist 構造体。
exceptlist
fd_set 型、メッセージ・キュー ID の配列のポインター、または例外保留条件について検査する記述子および メッセージ・キューを指定する sellist 構造体。
timeout
selectex() 呼び出しの完了を待機する時間へのポインター。
ecbptr
この変数に、次の値の 1 つを入れることができます。
  1. ユーザー・イベント制御ブロックへのポインター。この ecbptr の使用を指定するには、高位ビットを '0'B に 設定する必要があります。
  2. ECB のリストのポインター。この ecbptr の使用を指定するには、高位ビットを '1'B に 設定する必要があります。

    リストには、最大 1013 ECB までポインターを入れることができます。リストの最後のポインターの高位ビットは、'1'B に設定する 必要があります。

  3. NULL ポインター。ECB が指定されていないことを示します。

C++ の特殊な動作: C++ でこの関数を使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを 使用する必要があります。

戻り値

値 -1 は、エラーについて調べる必要があるエラー・コードを示します。値 0 は、時間制限が満了であること、または ECB が記入される ことを示します。

戻り値が 0 より大きい場合には、高位 16 ビットで メッセージ・キューが指定され、下位 16 ビットで記述子数が指定されるので、この戻り値は nmsgsfds と類似しています。これらの値は、読み取り、書き込み、および例外のそれぞれの基準を満たす合計値を示します。記述子または メッセージ・キューは、複数の指定基準を満たす場合には、数回カウントされる場合があることに注意してください。メッセージ・キューの戻り値が値 32767 を超えていても、32767 だけが報告されることになります。これは、戻り値が負の値にならないようにするためです。ファイル/ソケット記述子の戻り値が 65535 を超えていても、65535 だけが報告されることになります。

戻り値が 0 より大きい場合には、各ビット・セットで作動可能なファイル/ソケットが 1 に設定されます。作動不能の各ビット・セットのファイル/ソケットは、ゼロに設定されます。各ソケットでマクロ FD_ISSET() を使用して、その状況をテストします。条件を満たさないメッセージ・キューの場合には、msgsid 配列の ID は値 -1 で置き換えられます。
エラー・コード
説明
EBADF
記述子セットの 1 つで指定した記述子が誤りか、またはメッセージ・キュー ID が無効です。
EFAULT
パラメーターの 1 つに、無効アドレスが含まれていました。
EINTR
選択したイベントのいずれかが発生する前、およびタイムアウト・インターバルが終了する前に、selectex() に割り込みが入りました。
EINVAL
timeval 構造体のフィールドの 1 つが誤りです。
EIO
セレクト・マスク内の記述子の 1 つが作動不能になりました。 この記述子に対する他の操作が EIO で失敗しているにもかかわらず、この記述子は繰 り返してセレクトに組み込まれています。 例えば、ソケット記述子は TCP/IP がシャットダウンされれば作動不能になります。 セレクトからの失敗は、どの記述子に失敗が起きたのかは通知されません。そのため、通常の場合、セレクトは成功し、これらの記述子はどのようなイベントのためにセレクトされたのかにはかかわらず、作動可能と報告されます。その後に、その記述子が受信または他の操作に使用されたときに、EIO の失敗が受 信され、個々の記述子の問題に対処することができます。 一般的には、記述子をクローズして、それを次のセレクト・マスクから取り外します。呼び出されるたびに EIO で失敗するにもかかわらず、その個々の記述子の失敗の戻りコードが無視されて、作動不能の記述子が繰り返しセレクトされ使用されたなら、最終的にはセレクト呼び出し自体が EIO で失敗します。

関連情報