ユーザ用ツール

サイト用ツール


alworker:ファイルデスクリプタ

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

alworker:ファイルデスクリプタ [2014/11/11 12:36] (現在)
ライン 1: ライン 1:
 +====== AlWorker ファイルデスクリプタ ======
 +
 +require "​al_worker_fd"​
 +----
 +ファイルが読み込み、または書き込み可能になったことをトリガーにして動作する機能です。\\
 +IO::​select() のwrapperであり、典型的にはデバイスファイルを対象に読み書きをします。
 +
 +====== サンプル ======
 +
 +<file ruby fd_server.rb>​
 +require "​al_worker_fd"​
 +
 +class FdServer < AlWorker
 +
 +  # イニシャライザでハンドラを定義する
 +  def initialize2()
 +    @fd = Fd.open( "/​dev/​cuaU0"​ )
 +#    又は、
 +#    @file = open( "/​dev/​cuaU0"​ )
 +#    @fd = Fd.new( @file )
 +
 +    # read可能になった時の処理
 +    @fd.ready_read() {
 +      txt = @fd.file.gets
 +      puts " READING: #​{txt}"​
 +    }
 +  end
 +end
 +
 +server = FdServer.new( "​fd_server"​ )
 +server.daemon()
 +</​file>​
 +
 +===== 解説 =====
 +
 +Fd.open() または、Fd.new() でオブジェクトを生成し、ready_read() メソッドをコールしておくと、ファイルが読み込み可能になった時に ready_read() に渡したブロックが実行されます。\\
 +ファイルが書き込み可能になった時に実行したい処理には、ready_write()を使います。\\
 +
 +====== 同期・非同期 ======
 +
 +イベントハンドラは、デフォルトで同期的に呼び出されます。非同期にしたい場合は、mode_sync アトリビュートを変更します。
 +
 +<code ruby>
 +    @fd.mode_sync = :​async ​   # 非同期
 +    @fd.mode_sync = :sync     # 同期(デフォルト)
 +</​code>​
  
alworker/ファイルデスクリプタ.txt · 最終更新: 2014/11/11 12:36 by hirohito