node.jsというかJavaScriptは非同期処理が基本で、ファイル読み込みなどはコールバックで受け取る形になるが、簡単のために、従来的な同期読み込みで処理させたい。

エコー:

const fs = require('fs');
function readline() {
  var result = fs.readSync(process.stdin.fd, 100000, null, 'utf-8');
  // [読み込んだ内容(文字列), バイト数]
  if (result[1] === 0)
    return null;
  return result[0];
}

var line;
while (line = readline()) {
  process.stdout.write(line);
}
  • fs.readSyncのManualを見ても、引数も戻り値もまったく違うんだけどなんなのこれ?

これでも動く:

const fs = require("fs");
var readline = (function() {
  var BUFFER_SIZE = 4096;
  var buffer = new Buffer(BUFFER_SIZE);
  return function() {
    var n = fs.readSync(process.stdin.fd, buffer, 0, BUFFER_SIZE);
    if (n <= 0)
      return null;
    return buffer.slice(0, n).toString();
  };
})();

var line;
while (line = readline()) {
  process.stdout.write(line);
}