[英]What is the simplest way to execute arbitrary process with stdin, stdout forwarded to a socket?
我对以下两种情况感兴趣:
欢迎回答Linux,Windows和OSX。
Linux / OSX(实际上是POSIX),编程(具有POSIX调用的任何语言),一般方案:
fork()
close(0)
, close(1)
(不是必须的, dup2
也会将其关闭...但是为了清楚起见添加了它) dup2(socket, 0)
, dup2(socket, 1)
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.