1

我对两种情况感兴趣:

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

欢迎为 Linux、Windows 和 OSX 提供答案。

4

3 回答 3

3

我还想知道xinetd在这种情况下是否没有帮助。它允许您编写一个程序,该程序仅从标准输入读取并写入标准输出,然后 xinetd 处理侦听某些套接字,分离必要的 i/o 套接字,并将它们附加到您的进程。

于 2009-10-17T17:49:32.413 回答
3

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

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

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

于 2009-10-17T17:40:55.170 回答
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 将被重定向到管道。如果您希望能够切换最终目的地的去向,或者如果您想沿途进行一些处理,这很好,因为每个管道都可以进行一些处理。

于 2009-10-17T17:49:16.267 回答