2

指定されたバイト数をファイルハンドル (実際にはソケット) に書き込むことができるかどうかを判断するにはどうすればよいですか? (あるいは、他のファイルハンドルから読み取ったデータを「未読」にする方法は?)

私は次のようなものが欲しい:

n = how_much_can_I_write(w_handle);
n = read(r_handle, buf, n);
assert(n==write(w_handle, buf, n));

両方のファイルハンドル (r_handle と w_handle) が epoll_wait から準備完了ステータスを受け取りました。

「書き込み債務」バッファを使用せずに、r_handle からのすべてのデータを w_handle にコピーしたいと考えています。

一般に、あるファイルハンドルから別のファイルハンドルにデータを簡単かつ確実にコピーするにはどうすればよいでしょうか?

@related Linux で 2 つのソケットを「相互接続」するにはどうすればよいですか?

4

2 に答える 2

0

その情報にアクセスできるインターフェースはないと思います。とにかく情報を入手するとすぐに古くなります。

両方のファイル記述子を非ブロッキングに設定してから、EAGAIN / EWOULDBLOCKを取得するまで1K(おそらくそれ以上)のブロックを読み取り/書き込みすることをお勧めします。次に書き込みfdの準備ができるまで、1つのブロックをキャッシュする必要があります。

とにかく読み取り/書き込みサイクルを実行するためのバッファーが必要なので、書き込み債務用のバッファーを保持することはあまりにも問題になるはずですか?

于 2010-04-20T10:06:47.590 に答える
0

それはできません - データが書き込まれると、それは書き込まれます - 操作は元に戻すことも、事前に予測することもできません。プログラムのロジックを再考する必要があります。

于 2010-04-20T09:40:07.637 に答える