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

时间:2009-10-17 17:32:03

标签: c++ sockets shell stdout stdin

我对两种情况感兴趣:

  • 如何从C ++中完成?
  • 如何从系统的shell中执行此操作?

欢迎使用Linux,Windows和OSX的答案。

3 个答案:

答案 0 :(得分:3)

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

  1. 设置套接字......
  2. fork()
  3. close(0)close(1)(不是必需的,dup2也将关闭它......但为了清晰起见而添加了此内容)
  4. dup2(socket, 0)dup2(socket, 1)
  5. exec()
  6. 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会被重定向到管道。如果您希望能够切换最终目的地的位置,或者您希望在此过程中进行一些处理,这很好,因为每个管道都可以进行一些处理。