javascript – 为一个emscripten HTML程序提供stdin?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为一个emscripten HTML程序提供stdin?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2196字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 为一个emscripten HTML程序提供stdin?](/upload/InfoBanner/zyjiaocheng/705/fffab49537784e2f89eb07550ecbf0e3.jpg)
我有一个C程序,它通过命令行接受一个参数(一个char数组/字符串),并从stdin读取.我使用emscripten将其编译为JavaScript.这是成功的,我可以像使用node.js的普通C程序一样运行它:
emcc -O2 translate.c
node translate.js "foo" < bar.txt
如您所见,我提供字符串“foo”作为参数,bar.txt的内容为stdin.现在我希望这是一个自包含的HTML文件.
通过将输出更改为HTML:
emcc -O2 translate.c -o trans.html
我将adding arguments: ['foo'],的参数提供给var Module中的定义.这按预期工作,程序正确接收参数.
现在,我如何为此程序提供stdin输入?我不需要动态地这样做.只需在HTML中的某个地方声明一个包含所需stdin内容的字符串即可.
编辑
刚刚找到了适合我的解决方案.在生成HTML的JS文件中,有一个默认的输入处理程序,当没有定义其他输入方法时,prompt()是用户.只需编辑变量结果或调用您自己的函数:
} else if (typeof window != 'undefined' &&
typeof window.prompt == 'function') {
// Browser.
// REPLACE THIS CODE:
result = window.prompt('Input: '); // returns null on cancel
if (result !== null) {
result += '\n';
}
解决方法:
一种方法是使用Emscripten Filesystem API,例如在Module preRun函数中调用FS.init,传递用于标准输入,输出和错误的自定义函数.
var Module = {
preRun: function() {
function stdin() {
// Return ASCII code of character, or null if no input
}
function stdout(asciiCode) {
// Do something with the asciiCode
}
function stderr(asciiCode) {
// Do something with the asciiCode
}
FS.init(stdin, stdout, stderr);
}
};
这些函数非常低级:它们每个处理一个字符作为ASCII码.如果您想要传入字符串,则必须自己迭代字符串的字符.我怀疑charCodeAt会有所帮助.要从stdout或stderr输出字符串,我怀疑fromCharCode会有所帮助.
以下是使用各自的示例(未经过很好测试的!)实现.
var input = "This is from the standard input\n";
var i = 0;
var Module = {
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);
}
};
内容总结
以上是互联网集市为您收集整理的javascript – 为一个emscripten HTML程序提供stdin?全部内容,希望文章能够帮你解决javascript – 为一个emscripten HTML程序提供stdin?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。