Node.js 如何在节点中的文件描述符之间进行流式传输?

Node.js 如何在节点中的文件描述符之间进行流式传输?,node.js,stream,file-descriptor,child-process,Node.js,Stream,File Descriptor,Child Process,fs.createReadStream()和fs.createWriteStream()仅支持文件路径,但我需要从文件描述符(传递给/从子进程)读取(或写入) 注意:我需要流,因此fs.open/fs.read/fs.write不够。调用时,可以传入文件描述符: var fs = require('fs'); var fd = fs.openSync('/tmp/tmp.js', 'r'); var s = fs.createReadStream(null, {fd: fd}); s.pipe(

fs.createReadStream()
fs.createWriteStream()
仅支持文件路径,但我需要从文件描述符(传递给/从子进程)读取(或写入)

注意:我需要流,因此
fs.open/fs.read/fs.write
不够。

调用时,可以传入文件描述符:

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

如果有
fd
选项,文件名将被忽略。

太好了!我发现反过来也适用于
fs.createWriteStream(null,{fd:fd})。奇怪的是,手册中没有记录这一点,但它就像一个符咒。如果你仔细看我链接的文档,你会发现它至少在文档中有所暗示,尽管我承认我在源代码中找到了它。:)是的,但是所有其他的fs方法都有专门的文件描述符版本。我确实注意到fd参数,但没有任何迹象表明可以使用null作为路径。奇怪的是,你需要像这样传递空字符串
fs.createReadStream(''',{fd:fd})
,而不是
null
.LOL“仔细观察”
// 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");