如何在NACL中重定向stdin和stdout?

用户名

以下更改将nethack nacl端口从使用nacl-mounts更新为nacl_io。在nacl-mounts版本中,使用JSPipeMount将来自浏览器的消息集中到nacl程序的stdin中。在nacl_io版本中,该如何完成?

https://chromium.googlesource.com/external/naclports/+/8ac229a6e3fddff3e061017a8eb85105874570b3%5E!/

宾吉

如提交描述中所述:“浏览器和nexe之间的通信由TtyNode使用Pepper Simple处理。”

我在这里回答了有关native-client-discuss Google组的更多详细信息,回答了相同的问题:https : //groups.google.com/d/msg/native-client-discuss/nOKHWBhBPfs/i_gUYIFuBJAJ

这是该帖子的内容:

在nacl_io中,这只是一个节点(MountNodeTty),而不是新的安装。您可以通过打开文件“ / dev / tty”来访问它。

最简单的方法是使用“ ppapi_simple”库。它执行以下操作:

  • 设置pp::Instance::HandleMessage为将数据转发到节点,然后可以通过从“ / dev / tty”读取来读取数据
  • 写入“ / dev / tty”会变成对的调用pp::Instance::PostMessage
  • 如果要将stdin和stdout映射到/ dev / tty,可以将PS_STDINandPS_STDOUT参数设置为“ / dev / tty”。您可以通过向embed标签添加其他属性来做到这一点:

    <embed src =“ ...” type =“ application / x-pnacl” PS_STDIN =“ / dev / tty” PS_STDOUT = / dev / tty“ ...>

要自己进行操作,您必须执行ppapi_simple库的操作。基本上,要将数据馈入节点,请使用对ioctl的调用:

这是Pepper_30中的代码(src / ppapi_simple / ps_instance.cc:328)。pepper_32中的代码与此类似。

struct tioc_nacl_input_string ioctl_message;
ioctl_message.length = message_len;
ioctl_message.buffer = message_str.data();
int ret =
  ioctl(fd_tty_, TIOCNACLINPUT, reinterpret_cast<char*>(&ioctl_message));

pp::Instance::PostMessage在写入节点时调用该节点,请对ioctl使用不同的调用:

在Pepper_30中,这是自动完成的。所有消息都带有前缀,因此您可以区分它们。可以使用ioctl(src / ppapi_simple / ps_instance.cc:210)进行设置:

const char* tty_prefix = getenv("PS_TTY_PREFIX");
if (tty_prefix) {
  fd_tty_ = open("/dev/tty", O_WRONLY);
  if (fd_tty_ >= 0) {
    ioctl(fd_tty_, TIOCNACLPREFIX, const_cast<char*>(tty_prefix));
  } else {
    Error("Failed to open /dev/tty.\n");
  }
}

在Pepper_31及更高版本中,必须为tty节点显式设置一个回调函数。您可以使用第三个ioctl(src / ppapi_simple / ps_instance.cc:221)来做到这一点:

  tioc_nacl_output handler;
  handler.handler = TtyOutputHandlerStatic;
  handler.user_data = this;
  ioctl(tty_fd_, TIOCNACLOUTPUT, reinterpret_cast<char*>(&handler));

最后,如果要将stdin / stdout重新映射到/ dev / tty,则也必须手动进行。这是ppapi_simple的操作方式(src / ppapi_simple / ps_instance:201):

int fd0 = open(getenv("PS_STDIN"), O_RDONLY);
dup2(fd0, 0);

int fd1 = open(getenv("PS_STDOUT"), O_WRONLY);
dup2(fd1, 1);

同样,最简单的实现方法是使用ppapi_simple或从该库复制行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在bash中同时重定向stdin和stdout和stderr?

来自分类Dev

如何将stdout和stdin重定向到telnet?

来自分类Dev

Bash中stdin和stdout重定向的优先级

来自分类Dev

我如何将流程的stdout,stderr和stdin重定向到Groovy中的文件,以及从Bash shell中重定向文件?

来自分类Dev

如何像在Bash shell中一样,将流程的stdout,stderr和stdin重定向到Groovy中的文件或从其中重定向?

来自分类Dev

如何将命令的“ stdin”和“ stdout”重定向到输出

来自分类Dev

如何将命令的 `stdin` 和 `stdout` 重定向到输出

来自分类Dev

为什么重定向到stdout和stdin在PIPE编程中如此常见

来自分类Dev

将bash中的stdin和stdout都重定向到不同的文件

来自分类Dev

将stdin和stdout重定向到端口

来自分类Dev

将stdout和stdin重定向到文件

来自分类Dev

如何将nohup stdout重定向到stdin

来自分类Dev

具有stdin / stdout重定向的xargs

来自分类Dev

如何在Windows中重定向std :: cout和printf

来自分类Dev

如何在bash中重定向到stdin但每行之间有延迟?

来自分类Dev

如何在ruby 2.1.6中将下标的STDOUT重定向到变量

来自分类Dev

如何在python中重定向Gtk.Window()调用的stderr / stdout?

来自分类Dev

如何在变量中重定向stderr但将stdout保留在控制台中

来自分类Dev

当命令作为变量传递时,如何在命令替换中包括stdout / stderr重定向?

来自分类Dev

如何将stderr和stdout重定向到不同的文件并在终端中显示?

来自分类Dev

如何将bst脚本中的stdout和stderr都重定向到文件?

来自分类Dev

如何将stderr和stdout重定向到不同的文件并在终端中显示?

来自分类Dev

PERL:如何在包装器内重定向脚本的STDOUT

来自分类Dev

将stdout和/或stderr重定向到变量中的路径

来自分类Dev

如何从DLL重定向STDOUT

来自分类Dev

在脚本中使用sudo su运行命令,并重定向stdin和stdout

来自分类Dev

使用nohup替换日志文件,而不会影响“ stdin和stdout的重定向”

来自分类Dev

如何为Python(调试器)设置Visual Studio Code stdin / stdout重定向?

来自分类Dev

cryptsetup-如何打印提示绕过stdout / stdin重定向提示?

Related 相关文章

  1. 1

    如何在bash中同时重定向stdin和stdout和stderr?

  2. 2

    如何将stdout和stdin重定向到telnet?

  3. 3

    Bash中stdin和stdout重定向的优先级

  4. 4

    我如何将流程的stdout,stderr和stdin重定向到Groovy中的文件,以及从Bash shell中重定向文件?

  5. 5

    如何像在Bash shell中一样,将流程的stdout,stderr和stdin重定向到Groovy中的文件或从其中重定向?

  6. 6

    如何将命令的“ stdin”和“ stdout”重定向到输出

  7. 7

    如何将命令的 `stdin` 和 `stdout` 重定向到输出

  8. 8

    为什么重定向到stdout和stdin在PIPE编程中如此常见

  9. 9

    将bash中的stdin和stdout都重定向到不同的文件

  10. 10

    将stdin和stdout重定向到端口

  11. 11

    将stdout和stdin重定向到文件

  12. 12

    如何将nohup stdout重定向到stdin

  13. 13

    具有stdin / stdout重定向的xargs

  14. 14

    如何在Windows中重定向std :: cout和printf

  15. 15

    如何在bash中重定向到stdin但每行之间有延迟?

  16. 16

    如何在ruby 2.1.6中将下标的STDOUT重定向到变量

  17. 17

    如何在python中重定向Gtk.Window()调用的stderr / stdout?

  18. 18

    如何在变量中重定向stderr但将stdout保留在控制台中

  19. 19

    当命令作为变量传递时,如何在命令替换中包括stdout / stderr重定向?

  20. 20

    如何将stderr和stdout重定向到不同的文件并在终端中显示?

  21. 21

    如何将bst脚本中的stdout和stderr都重定向到文件?

  22. 22

    如何将stderr和stdout重定向到不同的文件并在终端中显示?

  23. 23

    PERL:如何在包装器内重定向脚本的STDOUT

  24. 24

    将stdout和/或stderr重定向到变量中的路径

  25. 25

    如何从DLL重定向STDOUT

  26. 26

    在脚本中使用sudo su运行命令,并重定向stdin和stdout

  27. 27

    使用nohup替换日志文件,而不会影响“ stdin和stdout的重定向”

  28. 28

    如何为Python(调试器)设置Visual Studio Code stdin / stdout重定向?

  29. 29

    cryptsetup-如何打印提示绕过stdout / stdin重定向提示?

热门标签

归档