RingoJS には、最後に到達するまでストリーム全体を読み取ることができる関数が呼び出されます。read
これは、コマンド ライン アプリケーションを作成する場合に便利です。たとえば、次のようなtac
プログラムを作成できます。
#!/usr/bin/env ringo
var string = system.stdin.read(); // read the entire input stream
var lines = string.split("\n"); // split the lines
lines.reverse(); // reverse the lines
var reversed = lines.join("\n"); // join the reversed lines
system.stdout.write(reversed); // write the reversed lines
これにより、シェルを起動してtac
コマンドを実行できます。次に、必要な数の行を入力し、完了したらCtrl+ D(またはWindows では +) を押して、送信のCtrl終了を知らせることができます。Z
node.jsで同じことをしたいのですが、そうする関数が見つかりません。readSync
ライブラリの関数を使用しfs
て次のようにシミュレートすることを考えましたが、役に立ちませんでした。
fs.readSync(0, buffer, 0, buffer.length, null);
stdin (最初の引数)のファイル記述子0
は. したがって、キーボードからデータを読み取る必要があります。代わりに、次のエラーが表示されます。
Error: ESPIPE, invalid seek
at Object.fs.readSync (fs.js:381:19)
at repl:1:4
at REPLServer.self.eval (repl.js:109:21)
at rli.on.self.bufferedCmd (repl.js:258:20)
at REPLServer.self.eval (repl.js:116:5)
at Interface.<anonymous> (repl.js:248:12)
at Interface.EventEmitter.emit (events.js:96:17)
at Interface._onLine (readline.js:200:10)
at Interface._line (readline.js:518:8)
at Interface._ttyWrite (readline.js:736:14)
入力テキスト ストリーム内のすべてのデータを同期的に収集し、それを node.js 内の文字列として返すにはどうすればよいでしょうか? コード例は非常に役立ちます。