2014-07-05 7 views
6

fs.createReadStream() और fs.createWriteStream() केवल फ़ाइल रास्तों समर्थन लेकिन मैं एक फ़ाइल वर्णनकर्ता (एक बच्चे की प्रक्रिया से/पारित कर दिया) से पढ़ने के लिए (या लिखने) की जरूरत है।नोड में फ़ाइल डिस्क्रिप्टर से/से स्ट्रीम कैसे करें?

नोट मुझे स्ट्रीम की आवश्यकता है, इसलिए fs.open/fs.read/fs.write पर्याप्त नहीं हैं।

उत्तर

11

जब आप फोन fs.createReadStream आप एक फ़ाइल डिस्क्रिप्टर में पारित कर सकते हैं:

var fs = require('fs'); 
var fd = fs.openSync('/tmp/tmp.js', 'r'); 
var s = fs.createReadStream(null, {fd: fd}); 
s.pipe(process.stdout); 

अगर वहाँ एक fd विकल्प है, फ़ाइल नाम नजरअंदाज कर दिया है।

+1

उत्कृष्ट! मैंने पाया कि रिवर्स भी काम करता है, 'fs.createWriteStream (शून्य, {fd: fd}); '। अजीब यह मैनुअल में दस्तावेज नहीं है, लेकिन यह एक आकर्षण की तरह काम करता है। – Bartvds

+0

यदि आप उस दस्तावेज़ पर ध्यान से देखते हैं जो मैंने लिंक किया है, तो आप देखते हैं कि कम से कम दस्तावेज़ों में संकेत दिया गया है, हालांकि मैं मानता हूं कि मुझे इसे स्रोत में मिला है। :) –

+0

हाँ, लेकिन अन्य सभी fs विधियों में फाइल डिस्क्रिप्टर के लिए स्थानिक संस्करण हैं। मैंने एफडी परम नोटिस किया लेकिन कुछ भी सुझाव नहीं देता कि आप पथ के रूप में शून्य का उपयोग कर सकते हैं। अजीब है कि। – Bartvds

1
// Open &3: 
process.oob1 = fs.createWriteStream(null, { fd: 3 }); 
// Write to &3/oob1 (out-of-band 1) 
process.oob1.write("Note: this will throw an exception without 3>&1 or something else declaring the existence of &3"); 
संबंधित मुद्दे