繁体   English   中英

使用stdin,stdout转发到套接字的执行任意进程的最简单方法是什么?

[英]What is the simplest way to execute arbitrary process with stdin, stdout forwarded to a socket?

我对以下两种情况感兴趣:

  • 如何用C ++做到这一点?
  • 如何从系统的外壳做?

欢迎回答Linux,Windows和OSX。

Linux / OSX(实际上是POSIX),编程(具有POSIX调用的任何语言),一般方案:

  1. 设置一个插座...
  2. fork()
  3. close(0)close(1) (不是必须的, dup2也会将其关闭...但是为了清楚起见添加了它)
  4. dup2(socket, 0)dup2(socket, 1)
  5. exec()

Shell:使用nc 我的其他答案中的示例: https : //stackoverflow.com/questions/1269400/is-this-a-fair-question-to-ask-in-a-software-engineering-interview-phase-1/1269577#1269577

我也想知道xinetd在这种情况下是否没有帮助。 它使您可以编写一个程序,该程序仅从stdin读取并写入stdout,然后xinetd处理监听某些套接字,分离出必要的I / O套接字并将它们附加到您的进程中。

对于UNIX,可以从外壳程序访问: http : //www.askdavetaylor.com/how_do_i_reredirectdirect_stdin_in_a_unix_or_linux_shell_script.html

有关更多常规信息: http : //www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

对于Windows,连接至套接字: http : //www.unix.com/high-level-programming/79439-redirect-stdin-out-sockets.html

这是有关unix重定向的说明: http : //www.rtems.com/ml/rtems-users/2007/october/msg00063.html

现在,此程序将仅重定向程序中的任何内容到stdin / out / err。

我喜欢最后一个链接在程序退出之前也可以还原stdin / out / err的事实。 如果您进行任何此类更改,则记住要做好恢复。

可以使用多种方法来进行操作,例如,可以使用管道并将管道转到套接字或文件中,以便将stdin / out重定向到管道。 如果您希望能够切换最终目的地的位置,或者在此过程中要进行一些处理,因为每个管道都可以进行某些处理,则这很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM