0

我的目标是将 C++ 程序转换为 .pexe 文件,以便稍后在远程计算机上执行它。.pexe 文件将包含一些要在远程计算机上计算的数学公式或函数,因此我将基本上使用远程计算机的计算能力。对于所有这一切,我将使用 nacl_sdk 和 Pepper 库,如果有人能为我澄清一些事情,我将不胜感激:

  1. 是否可以将远程计算机上执行的 .pexe 文件的输出保存到文件中,如果可以的话,如何?支持哪些文件格式?
  2. 是否可以将远程计算机上执行的 .pexe 文件的输出自动发送到主机,如果可以,那么如何?
  3. 我是否必须安装任何东西才能在远程计算机上工作?

任何建议将不胜感激。

4

2 回答 2

1

根据我的尝试,您似乎无法捕获 pexe 写入标准输出的内容 - 它只是进入浏览器的标准输出(我花了几个小时才意识到它确实去了某个地方 - 我遵循了一个糟糕的教程这让我相信 pexes 标准输出将被发布到 javascript 端,并且想知道为什么它“什么也没做”)。

我目前也在将我的东西移植到 .pexe,结果证明这很简单,但这与我编写程序的方式有关:

我编写我的(C++)程序,以便所有代码部分仅从std::istream对象读取输入并将其输出写入某个std::ostream对象。然后我只需将std::cinand传递std::cout给顶层调用,就可以在 shell 中交互地使用程序。但是随后我可以轻松地换出顶级调用以使用 anstd::ifstreamstd::ofstream使用程序进行批处理(无需管道来自cat文件并重定向到文件,这在某些情况下可能很麻烦)。

由于我是这样编写程序的,所以我可以像这样实现消息处理程序

class foo : public pp::Instance {
   ... ctor, dtor,...
   virtual void HandleMessage(const pp::Var& msg) override {
       std::stringstream i, o;
       i << msg.AsString();
       toplevelCall(i,o);
       PostMessage(o.str());
   }
};

所以我从浏览器获得的数据被放入一个字符串流中,其余的代码可以用于输入。它得到另一个字符串流,其余代码可以将其输出写入其中。然后我只是将该输出发送回浏览器。(缺点是您必须等待程序完成才能看到结果 - 您可以从 ostream 派生一个类并让 << 运算符直接发布到浏览器...... nacl 应该带有一个这样做的类- 我不知道它是否真的......)

在 html/js 方面,您可以拥有 atextarea和 a pre(我喜欢将其称为 stdin 和 stdout ;-) )和一个将 textarea 的内容发布到 pexe 的按钮 - 并有一个事件处理程序来写入来自的消息pre像这样的 pexe

<embed id='pnacl' type='application/x-pnacl' src='manifest.nmf' width='0' height='0'/>
<textarea id="stdin">Type your input here...</textarea>
<pre id='stdout' width='80' height='25'></pre>

<script>
  var pnacl = document.getElementById('pnacl');
  var stdout = document.getElementById('stdout');
  var stdin = document.getElementById('stdin');
  pnacl.addEventListener('message', function(ev){stdout.textContent += ev.data;});
</script>
<button onclick="pnacl.postMessage(stdin.value);">Submit</button>

恭喜!您的程序现在在浏览器中运行!

我没有完成移植我的编译器,但似乎这甚至适用于使用 flex & bison 的东西(您只需将 FlexLexer.h 复制到 pnacl sdk 的包含目录并忽略有关“注册”的警告存储位置说明符:-)

于 2017-02-10T14:26:48.793 回答
0

您在浏览器中使用 .pexe 吗?这是通常的情况。

  1. 我建议使用nacl_io在浏览器中模拟 POSIX(另请查看file_io。这将允许您以您喜欢的任何格式在本地保存文件、检索它们。

  2. 要发送输出,请使用浏览器的常用功能,例如XMLHttpRequest。为此,您需要 PNaCl 与 JavaScript 对话,您可能需要查看一些示例

  3. 一个普通的网络服务器就可以了,这真的取决于你在做什么。

于 2016-05-11T15:55:41.527 回答