ストリームを閉じずに EOF をストリームに通知するにはどうすればよいですか?
標準入力で入力を待機するスクリプトがあり、ctrl-d を押すと、出力が標準出力に吐き出され、ctrl-d を押すまで再び標準入力を待機します。
私のnodejsスクリプトでは、そのスクリプトを生成し、stdinストリームに書き込み、ストリームを閉じずに何らかの方法でEOFを通知したいと考えています。これは機能しません:
var http = require('http'),
spawn = require('child_process').spawn;
var child = spawn('my_child_process');
child.stdout.on('data', function(data) {
console.log(data.toString());
});
child.stdout.on('close', function() {
console.log('closed');
})
http.createServer(function (req, res) {
child.stdin.write('hello child\n');
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
しかし、child.stdin.write(...) を child.stdin.end(...) に変更すると、機能しますが、1 回だけです。その後、ストリームは閉じられます。EOF は実際には文字ではなく、通常は -1 の文字ではないことをどこかで読んだので、これを試しましたが、これもうまくいきませんでした:
var EOF = new Buffer(1); EOF[0] = -1;
child.stdin.write("hello child\n");
child.stdin.write(EOF);