Linux上の/ dev/input/event [x]からHIDキーコードを名前付きパイプにダンプする簡単なC++アプリケーションを一緒に書きました。それはコンソールにうまくログを記録しますが、node.jsアプリケーションから名前付きパイプを読み取ると、ランダムにデータイベントが失われます。node.jsのC++名前付きパイプからの読み込み時にデータが見つかりません
関連するC++コード:
int fd;
char * myfifo = "/tmp/testfifo";
mkfifo(myfifo, 0660);
fd = open(myfifo, O_WRONLY);
while (1){
value = ev[0].value;
if (value != ' ' && ev[1].value == 1 && ev[1].type == 1) {
string s = to_string(ev[1].code);
char const *sop = (s + "\n").c_str();
cout << sop;
write(fd, sop, sizeof(sop));
}
}
関連のNode.jsコード:
var fifo = '/tmp/testfifo';
var fd = fs.openSync(fifo, 'r+');
fs.createReadStream(null, {fd:fd}).on('data', function (d) {
console.log(d);
});
私はC++出力がよさそうだが、私は知っているので、欠陥がある名前付きパイプを読み取るための私の方法を推測していますC++についてはほとんど何もないので、C++側で適切にパイプを流しているのか、node.js側で微調整する必要がある何らかの読み込みスロットルがあるかどうかは分かりません。何か案は?
'fd' C++のコードの値を確認してください。 –
値がよさそうです。私はそれがnode.js側にあると確信しています。なぜなら、私がspawnと同じパイプを使用すると、それはうまく動作するからです。とても興味深い。 –
このjavascriptは、より単純な 'fs.createReadStream( '/ tmp/testfifo')。on(...)'であっても、私にとっては役に立ちます。 –