5部 関数リファレンス

select

2011年9月20日
select RBITS, WBITS, EBITS, TIMEOUT

指定したファイル記述子のうち、どれが入出力操作が可能になっているのか、またはどれが例外状態にあるかを調べるものです。selectシステムコールを実行します。

ファイル記述子については用語集「ファイル記述子」を参照してください。

ビットマスクは、filenovecを使って、次のようにして作成することができます。

$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);

Comment

コメントを残す

メールアドレスが公開されることはありません。

リズムファクトリーはホームページの制作会社です。
ホームページ制作に関するご要望・ご相談はこちらからどうぞ。