bitmasks
を指定してシステムコール select
をコールする。
bitmasks
は 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);
または何かが ready になるまでブロックするには、
$nfound = select($rout=$rin, $wout=$win,
$eout=$ein, undef);
である。
bitmasks
はいずれも undef
にすることができる。
TIMEOUT
を指定する時は秒単位で、小数点も可能である。
注意:
インプリメントによっては $timeleft
を返す機能は利用できない場合がある。
その場合は常に指定した $timeout
と同じ値で $timeleft
が返る。