Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js FIFO-写入文件描述符时进程挂起_Node.js_File_File Descriptor_Fifo - Fatal编程技术网

Node.js FIFO-写入文件描述符时进程挂起

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); }); 如

我有以下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);
});
如您所见,我有两个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程序之间的通信。