0
我拼湊了一個簡單的C++應用程序,該應用程序將HID密碼從/ dev/input/event [x]轉儲到Linux上的命名管道。它很好地登錄到控制檯,但是當我從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(...)''。 –