alworker:ファイルデスクリプタ
no way to compare when less than two revisions
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | |||
— | alworker:ファイルデスクリプタ [2014/11/11 12:36] – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== AlWorker ファイルデスクリプタ ====== | ||
+ | |||
+ | require " | ||
+ | ---- | ||
+ | ファイルが読み込み、または書き込み可能になったことをトリガーにして動作する機能です。\\ | ||
+ | IO:: | ||
+ | |||
+ | ====== サンプル ====== | ||
+ | |||
+ | <file ruby fd_server.rb> | ||
+ | require " | ||
+ | |||
+ | class FdServer < AlWorker | ||
+ | |||
+ | # イニシャライザでハンドラを定義する | ||
+ | def initialize2() | ||
+ | @fd = Fd.open( "/ | ||
+ | # 又は、 | ||
+ | # @file = open( "/ | ||
+ | # @fd = Fd.new( @file ) | ||
+ | |||
+ | # read可能になった時の処理 | ||
+ | @fd.ready_read() { | ||
+ | txt = @fd.file.gets | ||
+ | puts " READING: # | ||
+ | } | ||
+ | end | ||
+ | end | ||
+ | |||
+ | server = FdServer.new( " | ||
+ | server.daemon() | ||
+ | </ | ||
+ | |||
+ | ===== 解説 ===== | ||
+ | |||
+ | Fd.open() または、Fd.new() でオブジェクトを生成し、ready_read() メソッドをコールしておくと、ファイルが読み込み可能になった時に ready_read() に渡したブロックが実行されます。\\ | ||
+ | ファイルが書き込み可能になった時に実行したい処理には、ready_write()を使います。\\ | ||
+ | |||
+ | ====== 同期・非同期 ====== | ||
+ | |||
+ | イベントハンドラは、デフォルトで同期的に呼び出されます。非同期にしたい場合は、mode_sync アトリビュートを変更します。 | ||
+ | |||
+ | <code ruby> | ||
+ | @fd.mode_sync = : | ||
+ | @fd.mode_sync = :sync # 同期(デフォルト) | ||
+ | </ | ||
alworker/ファイルデスクリプタ.txt · 最終更新: 2023/08/17 11:07 by hirohito