3

サーバーへの単純なコマンドライン クライアントを開発しようとしています。サーバーに接続してすべてを正しくセットアップした後、サーバーに接続さSTDINれたソケットと同じソケットにリダイレクトしますSTDOUTncofツールに似た動作を実現したい。

最も単純な解決策は、 /をselect()使用して、ソケットからソケットへ、およびソケットから へデータを渡すことです。read()write()STDINSTDOUT

システムコールを使用することを考えたSTDIN/にソケットを何らかの方法で接続する他の簡単な方法はありますか。しかし、それを機能させる方法がわかりません。STDOUT?dup2()

ありがとう。

4

2 に答える 2

1

Linuxではsplice(2)、カーネルレベルでファイル記述子間でデータを移動するために使用できます。select(2)ただし、2つの方向を並行して処理するには、(または同等の)を使用するか、2つのスレッドを使用する必要があります。

于 2013-03-21T10:43:28.200 に答える
0

もう 1 つの可能性は、プログラムでプロトコル ハンドシェイクを実行し、ソケットの準備ができたら、プログラムsocatを実行してデータ転送を実行することです。

たとえばdup2、ソケットをファイル記述子 3 にコピーし、その close-on-exec フラグを設定解除してから exec を呼び出しますsocat STDIO FD:3

于 2013-03-21T13:51:53.203 に答える