select RBITS, WBITS, EBITS, TIMEOUT
指定したファイル記述子のうち、どれが入出力操作が可能になっているのか、またはどれが例外状態にあるかを調べるものです。select
システムコールを実行します。
ファイル記述子については用語集「ファイル記述子」を参照してください。
ビットマスクは、fileno
とvec
を使って、次のようにして作成することができます。
$rin = $win = $ein = ''; vec($rin,fileno(STDIN),1) = 1; vec($win,fileno(STDOUT),1) = 1; $ein = $rin | $win;
複数のファイルハンドルにselect
を行ないたいのであれば、次のようなサブルーチンを書くとよいでしょう。
sub fhbits { local(@fhlist) = split(' ',$_[0]); local($bits); for (@fhlist) { vec($bits,fileno($_),1) = 1; } $bits; } $rin = &fhbits('STDIN TTY SOCK');
通常は、次のように使います。
($nfound,$timeleft) = select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
いずれかの準備が整うまでブロックするには、次のようにします。
$nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
どのビットマスクにもundef
を設定することができます。TIMEOUT
を指定するときは、秒数で指定し、少数でかまいません。
250 ミリ秒のsleep
と同じ効果が、次のようにして得られます。
select(undef, undef, undef, 0.25);