1

私は2つの状況に興味があります:

  • C ++からそれを行う方法は?
  • システムのシェルからそれを行う方法は?

Linux、Windows、OSXの回答は大歓迎です。

4

3 に答える 3

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 に答える
3

また、 xinetdがこの状況で役に立たないのではないかと思います。stdinから読み取り、stdoutに書き込むだけのプログラムを作成できます。その後、xinetdは、いくつかのソケットをリッスンし、必要なI / Oソケットを分割して、プロセスにアタッチします。

于 2009-10-17T17:49:32.413 に答える
0

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がパイプにリダイレクトされます。これは、最終的な宛先の行き先を切り替えたい場合、または各パイプが何らかの処理を実行できるため、途中で何らかの処理を実行したい場合に便利です。

于 2009-10-17T17:49:16.267 に答える