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
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 注
-
- バグ
-
- 規格
-
- 歴史
-
Time: 07:06:30 GMT, January 12, 2009