私は2つの状況に興味があります:
- C ++からそれを行う方法は?
- システムのシェルからそれを行う方法は?
Linux、Windows、OSXの回答は大歓迎です。
Linux / OSX(実際にはPOSIX)、プログラミング(POSIX呼び出しがある任意の言語)、一般的なスキーム:
fork()
close(0)
、close(1)
(必要ありませdup2
ん。これも閉じます...ただし、わかりやすくするために追加します)dup2(socket, 0)
、dup2(socket, 1)
exec()
シェル:を使用します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_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がパイプにリダイレクトされます。これは、最終的な宛先の行き先を切り替えたい場合、または各パイプが何らかの処理を実行できるため、途中で何らかの処理を実行したい場合に便利です。