手軽に使えるので応用に期待
このようにTime Machine用に追加されたFSEventだが、プログラムから使うのは非常に簡単だ。先ほどのwatcher.rbの一部を紹介しよう。
// 引数からパスを取得する
path = ARGV.first
// FSEventStreamを作成する
stream = FSEventStreamCreate(
KCFAllocatorDefault,
fsevents_cb,
nil,
[path],
KFSEventStreamEventIdSinceNow,
1.0,
0)
die "Failed to create the FSEventStream" unless stream
// FSEventStreamをランループに追加する
FSEventStreamScheduleWithRunLoop(
stream,
CFRunLoopGetCurrent(),
KCFRunLoopDefaultMode)
// FSEventStreamをスタートする
ok = FSEventStreamStart(stream)
die "Failed to start the FSEventStream" unless ok
begin
// ランループを開始する
CFRunLoopRun()
...
まず、パスを指定してFSEventStreamを作成する。これをCocoaのランループに追加して、イベントの監視をスタートする。これだけで利用可能だ。
シンプルなので、動作も軽い。機能は少ないが、色々な応用を考えるのが楽しいだろう。たとえば、Safariのダウンロードフォルダを監視して、ダウンロードの開始と終了イベントを捕まえたり、特定のフォルダにファイルをコピーすると処理を開始するスクリプとなどが作れるかもしれない。アイディア次第で、応用範囲は広がりそうだ。