ユーザ用ツール

サイト用ツール


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

文書の過去の版を表示しています。


AlWorker ファイルデスクリプタ

require "al_worker_fd"


ファイルが読み込み、または書き込み可能になったことをトリガーにして動作する機能です。
IO::select() のwrapperであり、典型的にはデバイスファイルを対象に読み書きをします。

サンプル

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()

解説

Fd.open() または、Fd.new() でオブジェクトを生成し、ready_read() メソッドをコールしておくと、ファイルが読み込み可能になった時に ready_read() に渡したブロックが実行されます。
ファイルが書き込み可能になった時に実行したい処理には、ready_write()を使います。

同期・非同期

イベントハンドラは、デフォルトで同期的に呼び出されます。非同期にしたい場合は、mode_sync アトリビュートを変更します。

    @fd.mode_sync = :async    # 非同期
    @fd.mode_sync = :sync     # 同期(デフォルト)
alworker/ファイルデスクリプタ.1415676978.txt.gz · 最終更新: 2014/11/11 12:36 by 127.0.0.1