2014-01-20 6 views
6

Die node.js API-Dokumente verarbeiten, um eine zusätzliche stdio mit (fd = 4), wenn dem Laichen einen Kind-Prozess:Extra-stdio Streams für node.js

// Open an extra fd=4, to interact with programs present a 
// startd-style interface. 
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] }); 

Das stdio über ChildProcess.stdio[fd] zu dem übergeordneten Prozess zur Verfügung stehen würde .

Wie kann der Kindprozess auf diese zusätzlichen stdios zugreifen? Verwenden wir einen Stream statt einer Pipe für den Dateideskriptor 3 (fd = 3).

/* parent process */ 

// open file for read/write 
var mStream = fs.openSync('./shared-stream', 'r+'); 

// spawn child process with stream object as fd=3 
spawn('node', ['/path/to/child.js'], {stdio: [0, 1, 2, mStream] }); 
+0

Haben Sie dieses Problem gelöst? – Bartvds

Antwort

7

Obwohl node.js dies nicht in der API-Dokumentation, können Sie auf diese Ströme mit der Indexnummer des Dateideskriptor mit fs.read und fs.write lesen/schreiben.

Ich habe nichts gefunden von der Überprüfung des process Objekts, das das Vorhandensein dieser stdios anzeigt, die für den Kindprozess verfügbar sind, so weit ich weiß, könnten Sie nicht feststellen, ob diese stdios von der Verfügung sind oder nicht Kind.

Wenn Sie jedoch sicher, dass Ihr Kind-Prozess mit diesem stdios hervorgebracht wird, dann können Sie wie so Lese-/Schreibfunktionen nutzen:

var fd_index = 3; 
fs.write(fd_index, new Buffer(data, 'utf8'), 0, data.length, null, function(err, bytesWritten, buffer) { 
    if(err) return failure(); 
    else ... 
    // success 
}); 
+0

Wie machst du uns das mit Streams? – Bartvds

+0

Wenn Sie mit Streams anstelle von Dateideskriptoren interagieren möchten, können Sie [fs.createReadStream] (http://nodejs.org/api/fs.html#fs_fs_create_readstream_path_options) und [fs.createWriteStream] (http: // nodejs .org/api/fs.html # fs_fs_createwritestream_path_options) –

+0

Yep, gefunden, dass hier: https://stackoverflow.com/questions/24582183/how-to-stream-to-from-a-file-descriptor-in-node/ 24582892? Noredirect = 1 # comment38127169_24582892 – Bartvds