node fs.writeFileSync()永远不会返回

时间:2018-02-22 01:04:40

标签: node.js typescript fs mkfifo

我正在创建一个管道并尝试写入它。但写作永远不会奏效。

Presbyterian

如果我评论除import * as fs from 'fs'; import * as mkfifo from 'mkfifo'; mkfifo.mkfifoSync('/tmp/my_fifo', 0o600); fs.writeFileSync('/tmp/my_fifo', 'Hey there!'); console.log('here'); 以外的所有内容,我会看到管道已创建好了。

但是,mkfifo.mkfifoSync('/tmp/my_fifo', 0o600);永远不会返回。

即使我使用回调版本`fs.writeFile()1,也不会触发回调。

fs.writeFileSync('/tmp/my_fifo', 'Hey there!');

永远不会调用回调。

我做错了什么?

就像检查一样,我打开并试图从另一个脚本中读取管道:

fs.writeFile('/tmp/my_fifo', 'Hey there!', (err) => {
    if (err) {
        return console.log('Write error: ' + err);
    }

    console.log('Write success');

    process.exit();
});

在作者方面,我看到错误:

fs.readFile('/tmp/my_fifo', (err, data) => {
    if (err) {
        return console.log('Read error: ' + err);
    }

    console.log('Read success. Data is: ' + data);
});

在读者方面,我看到:

Error: ESPIPE: invalid seek, write

空数据,但成功阅读。

更新

如果我不通过Read success. Data is: 创建管道,而只是调用mkfifoSync(),它将创建并写入文件就好了。

所以我的问题是如何写这个管道?

1 个答案:

答案 0 :(得分:1)

您必须使用appendFileSync方法而不是writeFileSync方法来写入命名管道

附加到命名管道

const fs = require("fs");
const mkfifo = require("mkfifo");

mkfifo.mkfifoSync("/tmp/my_fifo", 0o600);
fs.appendFileSync("/tmp/my_fifo", "hello world", ...);

从命名管道中读取

const fs = require("fs");
console.log(fs.readFileSync("/tmp/my_fifo").toString());