Как запустить интерактивную программу, скомпилированную с помощью Emscripten, на веб-странице?
У меня есть простая программа, скажем следующее:
#include <stdio.h>
int main()
{
char buf[100];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
printf("You typed: %s", buf);
}
}
и я скомпилировал его с помощью Emscripten:
emcc -o hello.html hello.cpp
Это дает мне довольно простую сгенерированную Emscripten веб-страницу, которая содержит простое окно для вывода программы. Тем не менее fgets()
вызов вызывает всплывающее окно браузера, предположительно из prompt()
, Я могу напечатать вещи, и результаты в конечном итоге будут показаны в окне вывода. Это не идеальный интерактивный опыт.
То, что я хотел бы, является более обычным "консольным" интерфейсом, где пользователь может вводить интерактивно в окне терминала, чтобы предоставить ввод для интерактивной программы.
Я подозреваю, что решение может заключаться в чем-то вроде JQueryTerminal, Hyper или Xterm.js, но мне пока неясно, как на самом деле подключить любой из них к программе, скомпилированной Emscripten.
Как я могу предоставить "консольный" интерфейс для моего кода Emscripten?
1 ответ
Это не совсем то, что вы хотели, я думаю, что это невозможно, но вот профессор концепции асинхронного кода, он злоупотребляет извлечением API в C и использует Proxy в JavaScript для XHR, который обрабатывает сообщения из C. Вы можете расширить его, чтобы иметь любой асинхронный код, который нужно сделать в JS. В примере используется терминал jQuery, и он ведет себя точно так же, как ваш пример кода C.
https://gist.github.com/jcubic/87f2b4c5ef567be43796e179ca08c0da
Я также создал проблему об асинхронном коде в репозитории emscripten