节点 fs.writeFileSync() 从不 returns
node fs.writeFileSync() never returns
我正在创建一个管道并试图写入它。但写作永远行不通。
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.writeFileSync('/tmp/my_fifo', 'Hey there!');
从来没有returns。
即使我使用回调版本 `fs.writeFile()1,也永远不会触发回调。
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
在 reader 一侧,我看到:
Read success. Data is:
空数据,但读取成功。
更新
如果我根本不通过 mkfifoSync()
创建管道,而只是调用 fs.writeFileSync()
,它将很好地创建和写入文件。
所以我的问题是如何写入此管道?
您必须使用 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());
我正在创建一个管道并试图写入它。但写作永远行不通。
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.writeFileSync('/tmp/my_fifo', 'Hey there!');
从来没有returns。
即使我使用回调版本 `fs.writeFile()1,也永远不会触发回调。
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
在 reader 一侧,我看到:
Read success. Data is:
空数据,但读取成功。
更新
如果我根本不通过 mkfifoSync()
创建管道,而只是调用 fs.writeFileSync()
,它将很好地创建和写入文件。
所以我的问题是如何写入此管道?
您必须使用 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());