在Emscripten和Node.js中阅读stdin并编写stdout

时间:2018-08-03 09:20:10

标签: c++ node.js emscripten

我的C ++库使用stdin处理stdoutstd::cout的{​​{1}}和stdin,直到std::istream::peek()为止

EOF

我正在构建启用了异常处理的系统:while (in.peek() != EOF) { //...read line }

我得到了一个我不理解的未处理异常。

emcc -s DISABLE_EXCEPTION_CATCHING=2 -s MODULARIZE=1 -s LEGACY_VM_SUPPORT=1 -s WASM=0 -O1 libfasttext.so -o libfasttext.js

我在没有特定的File-system API配置的情况下加载了模块:

Loaded Javascript Module OK
exception thrown: 5279128

阅读文档,我已经在let FastTextModule = require('./libfasttext.js'); let Module = null; if (Module) { return; } Module = { noExitRuntime: true, noInitialRun: true, preInit: [], preRun: [], postRun: [function () { console.log(`Loaded Javascript Module OK`); }], locateFile: "./", arguments: ['predict-prob', '/root/ft_lang_model.bin', 'test.csv', '2'] }; Module['locateFile'] = function (path, prefix) { return prefix + path; } FastTextModule(Module); Module.callMain(['predict-prob', '/root/ft_lang_model.bin', 'test.csv', '2']); 中定义了stdin / stdout函数,如here所述

preRun

但是我得到一个 { preRun: [ function() { function stdin() { if (i < res.length) { var code = input.charCodeAt(i); ++i; return code; } else { return null; } } var stdoutBuffer = ""; function stdout(code) { if (code === "\n".charCodeAt(0) && stdoutBuffer !== "") { console.log(stdoutBuffer); stdoutBufer = ""; } else { stdoutBuffer += String.fromCharCode(code); } } var stderrBuffer = ""; function stderr(code) { if (code === "\n".charCodeAt(0) && stderrBuffer !== "") { console.log(stderrBuffer); stderrBuffer = ""; } else { stderrBuffer += String.fromCharCode(code); } } FS.init(stdin, stdout, stderr); }] }

0 个答案:

没有答案