Jak mogę zasygnalizować EOF do strumienia bez zamykania strumienia?NodeJS: Wyślij EOF do strumienia standardowego bez strumienia zamykającego
Mam skrypt, który czeka na wejście na stdin, a następnie po naciśnięciu ctrl-d wypluwa wyjście na standardowe wyjście, po czym czeka ponownie na standardowe wejście, dopóki nie naciśnie ctrl-d.
W moim skrypcie nodejs chcę odrodzić ten skrypt, napisać do strumienia stdin, a następnie jakoś zasygnalizować EOF bez zamykania strumienia. To nie działa:
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');
Ale jeśli zmienię child.stdin.write (...) do child.stdin.end (...), to działa, ale tylko raz; po tym strumień jest zamknięty. Czytałem gdzieś, że EOF nie jest w rzeczywistości charakter, to jest po prostu coś, że nie jest to znak, zwykle -1, więc próbowałem tego, ale to nie działa albo:
var EOF = new Buffer(1); EOF[0] = -1;
child.stdin.write("hello child\n");
child.stdin.write(EOF);
Jestem prawie pewien, że to niemożliwe. Zobacz http://stackoverflow.com/questions/9633577/send-a-eof-in-a-pipe-without-closing-it –
Dlaczego nie możesz po prostu zamknąć strumienia wejściowego? Jestem tu raczej zdezorientowany. – jcolebrand
Ponieważ chcę ponownie napisać do standardowego wejścia. Proces czeka na EOF, a następnie fragmenty na wejściu, a następnie ponownie otwiera/dev/stdin, aby poczekać na więcej. –