Извлечение результатов / результатов из выполненного файла.pexe

Моя цель - преобразовать программу на C++ в файл.pexe, чтобы потом запустить ее на удаленном компьютере. Файл.pexe будет содержать некоторые математические формулы или функции для вычисления на удаленном компьютере, поэтому я в основном буду использовать вычислительную мощность удаленного компьютера. Для всего этого я буду использовать nacl_sdk с библиотекой Pepper и буду благодарен, если кто-нибудь сможет прояснить некоторые вещи для меня:

  1. Можно ли сохранить выходные данные исполняемого файла.pexe на удаленном компьютере в файл, если это возможно, то как? Какие форматы файлов поддерживаются?
  2. Можно ли автоматически отправлять выходные данные исполняемого файла.pexe на удаленном компьютере на хост-компьютер, если это возможно, то как?
  3. Нужно ли что-то устанавливать, чтобы это работало на удаленном компьютере?

Любое предложение будет оценено.

2 ответа

Решение

Из того, что я пробовал, кажется, что вы не можете захватить материал, который ваш pexe пишет в стандартный вывод - он просто идет в стандартный вывод браузера (мне потребовались часы, чтобы понять, что он куда-то идет - я следовал плохому учебнику это заставило меня поверить, что вывод pexes будет опубликован на стороне javascript, и мне было интересно, почему он "ничего не сделал").

В настоящее время я работаю над переносом своих вещей на.pexe, и это оказалось довольно простым, но это связано с тем, как я пишу свои программы:

Я пишу свои (C++) программы так, что все части кода читают входные данные только из std::istream возразить и записать свои выводы в некоторые std::ostream объект. Тогда я просто прохожу std::cin а также std::cout на вызов верхнего уровня и может использовать программу в интерактивном режиме в оболочке. Но тогда я могу легко поменять вызов верхнего уровня, чтобы использовать std::ifstream а также std::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, вы можете иметь textarea и pre (который мне нравится называть stdin и stdout;-)) и кнопка, которая отправляет содержимое текстовой области в pexe - и имеет обработчик событий, который записывает сообщения из pexe в pre как это

<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 в каталог include pnacl sdk и игнорировать предупреждения о "регистре"). спецификатор места хранения:-)

Вы используете.pexe в браузере? Это обычный случай.

  1. Я рекомендую использовать nacl_io для эмуляции POSIX в браузере (также посмотрите на file_io. Это позволит вам сохранять файлы локально, извлекать их в любом формате, который вам нравится.

  2. Для отправки вывода используйте обычные возможности браузера, такие как XMLHttpRequest. Для этого вам нужен PNaCl, чтобы поговорить с JavaScript, вы можете посмотреть на некоторые примеры.

  3. Подойдет обычный веб-сервер, это действительно зависит от того, что вы делаете.

Другие вопросы по тегам