SELECT

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

select - 同期的な入出力の多重化  

索引

ライブラリ

Lb libc  

索引

書式

In sys/select.h Ft int Fn select int nfds fd_set *readfds fd_set *writefds fd_set *exceptfds struct timeval *timeout Fn FD_SET fd &fdset Fn FD_CLR fd &fdset Fn FD_ISSET fd &fdset Fn FD_ZERO &fdset  

索引

解説

Fn select システムコールは、 Fa readfds , Fa writefds および Fa exceptfds でアドレスを渡された入出力記述子集合を調べ、 それらの記述子のいくつかがそれぞれ、読取り準備完了であるか、 書込み準備完了であるか、または保留されている例外条件があるかを調べます。 検出可能な唯一の例外条件は、ソケット上に受信した帯域外のデータです。 最初の Fa nfds 個の記述子が各集合内でチェックされます。 すなわち、記述子集合中の 0 〜 Fa nfds Ns No -1 の記述子が調べられます。 戻り時に Fn select システムコールは指定の記述子集合を、要求された操作の準備ができている記述子で 構成される部分集合で置き換えます。 Fn select は、すべての集合の中で準備ができた記述子の総数を返します。

記述子の集合は、整数配列内のビットフィールドとして保存されます。 このような記述子集合を操作するために次のマクロが用意されています: Fn FD_ZERO &fdset は記述子集合 Fa fdset を空集合で初期化します。 Fn FD_SET fd &fdset は特定の記述子 Fa fd を Fa fdset に含めます。 Fn FD_CLR fd &fdset は Fa fd を Fa fdset から削除します。 Fn FD_ISSET fd &fdset は Fa fd が Fa fdset のメンバである場合は非 0 の値を、そうでない場合は 0 を返します。 これらのマクロの動作は、記述子の値が 0 未満であるか、または FD_SETSIZE 以上である場合は未定義です。 FD_SETSIZE は通常、少なくとも、システムがサポートする記述子の最大数に等しくなります。

Fa timeout が、NULL ポインタでない場合、それはセレクションの完了を 待つ最大間隔を指定します。 システムの活動性が、この間隔を不定時間延長することがあります。

Fa timeout が NULL ポインタの場合、 Fn select は無期限にブロックします。

ポーリングのためには、 Fa timeout 引数は NULL でなく、値が 0 の timeval 構造体を指しているべきです。

Fa readfds , Fa writefds および Fa exceptfds のどれについても、いずれの記述子も興味がない場合は NULL ポインタを指定できます。  

索引

戻り値

Fn select システムコールは記述子集合に含まれている準備のできた記述子の数を返し、 エラーが起きた場合は -1 を返します。 タイムリミットが来ると、 Fn select は 0 を返します。 システムコールの割り込まれることによるものも含めて Fn select がエラーで戻る場合は、記述子集合は変更されません。  

索引

エラー

Fn select から戻るエラーは次のことを示します:

Bq Er EBADF
記述子集合のどれかが無効な記述子を指定していました。
Bq Er EFAULT
Fa readfds , writefds , exceptfds または Fa timeout の引数の 1 つが無効なアドレスを指しています。
Bq Er EINTR
タイムリミットが切れる前あるいは選択したイベントのいずれかが起きる前に、 シグナルが配送されました。
Bq Er EINVAL
指定のタイムリミットは無効です。 どれかが負であるか、または大きすぎます。
Bq Er EINVAL
Fa nfds 引数が無効でした。

 

索引

関連項目

accept(2), connect(2), getdtablesize(2), gettimeofday(2), kqueue(2), poll(2), read(2), recv(2), send(2), write(2), clocks(7)  

索引

FD_SETSIZE のデフォルトのサイズは現時点では 1024 です。 多数のオープンファイルを使用する可能性があるプログラムで Fn select を実行するために、 In sys/types.h を取り込むヘッダを含める前にプログラムで FD_SETSIZE を定義することで、このサイズを増加できます。

Fa nfds がオープンファイルの数より大きい場合、 Fn select が未使用のファイル記述子を調査することは保証されていません。 歴史的な理由で、 Fn select は最初の 256 個の記述子を必ず調査します。  

索引

バグ

St -susv2 では、システムが元の timeout を適当に更新することを許しています。 したがって、タイムアウトの値が Fn select システムコールによって変更されないと想定するのは賢明ではありません。  

索引

規格

Fn select システムコールおよび Fn FD_CLR , Fn FD_ISSET , Fn FD_SET , Fn FD_ZERO マクロは St -p1003.1-2001 に適合します。  

索引

歴史

Fn select システムコールは BSD 4.2 で登場しました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
バグ
規格
歴史

jman



Time: 07:06:30 GMT, January 12, 2009