Node.js FIFO-写入文件描述符时进程挂起
我有以下Node.js代码:Node.js FIFO-写入文件描述符时进程挂起,node.js,file,file-descriptor,fifo,Node.js,File,File Descriptor,Fifo,我有以下Node.js代码: var fs=require('fs'); var util=require('util'); var n2c=fs.createReadStream('./n2c'); var c2n=fs.createReadStream('./c2n'); n2c.on('data', function(b){ util.puts(b); }); c2n.on('data',function(b){ util.puts(b); }); 如
var fs=require('fs');
var util=require('util');
var n2c=fs.createReadStream('./n2c');
var c2n=fs.createReadStream('./c2n');
n2c.on('data', function(b){
util.puts(b);
});
c2n.on('data',function(b){
util.puts(b);
});
如您所见,我有两个FIFO文件描述符(使用创建:mkfifo n2c
,mkfifo c2n
,chmod 777 n2c c2n
)
当我在另一个窗口中回显“Hello”>n2c时,“Hello”显示良好。但是当我再次尝试时,echo“Hello”>n2c
挂起,node.js窗口中没有出现任何内容
我该如何解决这个问题?我希望能够无限期地在node.js窗口中回显“Hello”
请帮忙 问题是,当echo退出时,fifo将到达“文件”的末尾,因此您的readstream将发出“end”事件,读取流将关闭文件描述符,不再接受更多数据 如果fifo的两端都有两个长寿命的进程,那么这就不是问题了,但是由于echo先写入,然后关闭,它会很快停止节点流 最好的选择可能是在当前流触发“end”时重新创建流
不确定是否有更好的方法。问题是,当echo退出时,fifo将到达“文件”的末尾,因此您的readstream将发出“end”事件,读取流将关闭文件描述符,不再接受更多数据 如果fifo的两端都有两个长寿命的进程,那么这就不是问题了,但是由于echo先写入,然后关闭,它会很快停止节点流 最好的选择可能是在当前流触发“end”时重新创建流
不确定是否有更好的方法。以下是使用终端测试流的简单方法:
$ cat > n2c
Here you can type stuff
that will be streamed whenever you add a
newline.
You can send EOF (end of file) by
pressing Ctrl+D.
当您返回时,流将为节点提供每一行,并且在您执行Ctrl+D或以其他方式发送EOF字符之前不会切断
您的echo
在一行之后消失的原因是它在您键入任何内容后自动发送EOF
答案可能有点晚,但对其他人来说可能很有用。以下是使用终端测试流的简单方法:
$ cat > n2c
Here you can type stuff
that will be streamed whenever you add a
newline.
You can send EOF (end of file) by
pressing Ctrl+D.
当您返回时,流将为节点提供每一行,并且在您执行Ctrl+D或以其他方式发送EOF字符之前不会切断
您的echo
在一行之后消失的原因是它在您键入任何内容后自动发送EOF
答案可能有点晚,但可能对其他人有用。您好,非常感谢您的见解。我想我将使用unix套接字来代替Node.js程序和C程序之间的通信。您好,非常感谢您的见解。我想我将使用unix套接字来代替Node.js程序和C程序之间的通信。