====== AlWorker ファイルデスクリプタ ======
require "al_worker_fd"
----
ファイルが読み込み、または書き込み可能になったことをトリガーにして動作する機能です。\\
IO::select() のwrapperであり、典型的にはデバイスファイルを対象に読み書きをします。
====== サンプル ======
require "al_worker_fd"
class FdServer < AlWorker
# イニシャライザでハンドラを定義する
def initialize2()
@fd = Fd.open( "/dev/cuaU0" )
# IOオブジェクトが他の方法で用意されている場合は、以下の通り newメソッドを使う。
# io_obj = open( "/dev/cuaU0" )
# @fd = Fd.new( io_obj )
# read可能になった時の処理
@fd.ready_read() {|fd|
txt = fd.gets # 3.7以前は、txt = @fd.file.gets とする。
puts " READING: #{txt}"
}
@fd.ready_read() {
puts " READING: #{txt}"
}
end
end
server = FdServer.new( "fd_server" )
server.run()
===== 解説 =====
Fd.open() または、Fd.new() でオブジェクトを生成し、ready_read() メソッドをコールしておくと、ファイルが読み込み可能になった時に ready_read() に渡したブロックが実行されます。\\
ファイルが書き込み可能になった時に実行したい処理には、ready_write()を使います。\\
====== 同期・非同期 ======
イベントハンドラは、デフォルトで同期的に呼び出されます。非同期にしたい場合は、mode_sync アトリビュートを変更します。
@fd.mode_sync = :async # 非同期
@fd.mode_sync = :sync # 同期(デフォルト)