我对两种情况感兴趣:
欢迎使用Linux,Windows和OSX的答案。
答案 0 :(得分:3)
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
答案 1 :(得分:3)
我也想知道xinetd在这种情况下是否有用。它允许你编写一个简单地从stdin读取并写入stdout的程序,然后xinetd处理在某个套接字上的监听,拆分必要的i / o套接字,并将它们附加到你的进程。
答案 2 :(得分:0)
对于unix,来自shell: http://www.askdavetaylor.com/how_do_i_reredirect_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会被重定向到管道。如果您希望能够切换最终目的地的位置,或者您希望在此过程中进行一些处理,这很好,因为每个管道都可以进行一些处理。