fs.watchFile

花粉が舞っている。部屋の中でおとなしくしているのが正解。だからディスプレイの前に鎮座。

Air.new().delete(花粉)

ファイル更新の検知

node-dev がどうやってファイルの更新を検知しているか、が気になったのでソースを見てみた。ちなみに、node-dev の大まかな動きは、コマンドを子プロセスで実行し、ファイルの更新を検知したら子プロセス再起動させる、という感じだった。
で、どのような方法で検知していたかというと、File System モジュールの watchFile() を使用してファイルの更新を検知していた。

watchFile

試してみる。

var fs = require('fs');

var file = process.argv[2];

fs.watchFile(file, function (curr, prev) {
  console.log('size:' + curr.size + ', mtime:' + curr.mtime);
});

var fd = fs.openSync(file, 'w');
setTimeout(function() {
    fs.writeSync(fd, 'foo are you?\n', 0);
    fs.close(fd, function(err) {
      fs.unwatchFile(file);
    });
  },
  1000
);

実行

% node watch.js output.txt
size:0, mtime:Sun Feb 27 2011 17:17:12 GMT+0900 (JST)
size:13, mtime:Sun Feb 27 2011 17:17:13 GMT+0900 (JST)

output.txt がない状態で実行すると何も表示されない。当然か、見張るファイルがないんだし。