2010-12-14 7 views
0

ソケットプログラミングでCファイルストリームを使用する際に質問があります。私はそれについて読んでいて、レビューが混在しているのを見ました。信頼できないと言っている人がいます(つまり、漏れた抽象化?)。CソケットプログラミングでC FILEストリームを使用する

ソケットプログラミングでCファイルストリームを使用することについて誰かが見ていますか?

+0

AFAIK、これは特定のコンパイラ/ 、もしあれば。 – Simone

+0

ありがとうSimone!私はそれが私のターゲットプラットフォームで動作するかどうかを確認する必要があります... – Poliquin

答えて

4

はい。しないでください。

TCPおよびUDPプロトコルには、通常のファイルストリームAPIに簡単にマップできるセマンティクスが多すぎます。それは不可能ではない、あるいは難しいと言っているわけではありませんが、予期せぬ挙動を与える大変なケースや厄介なケースがたくさんありそうです。私はまた、ソケットを普通のファイルとして扱いたいかもしれないアプリケーションの頭の中で、一番上のものを考えることはできません。

バインディングとリッスンと受け入れを処理した後は、Cファイルストリームではできませんが、ファイルストリーム型で結果のファイルディスクリプタをラップしますfread()とfwrite()、おそらくfgetc()を使用しているので、普通のファイル記述子とus recv()とsend()のままにしてラッピングの手間を省くことができます。バッファリングを扱う手間を省くことができますが、バッファリングを制御することで、バッファをアプリケーションの要件に合わせて調整し、ネットワークのオーバーヘッドやスピードを節約できます。

+0

ありがとうAlastairG!私はあなたの議論から多くを学んだ。 – Poliquin

0

これは、作成しているアプリケーションの種類によって異なります。 FILEストリームは、ノンブロッキング、非同期、またはselect/pollベースのIOには適していません。これは、サーバーへの接続、要求の実行、結果の取得という順次タスクを実行するコマンドラインプログラムでは問題ありません。 run-in-in-in-onlyサーバプロセスでもうまく動作します。しかし、あなたのアプリケーションがイベントベースの何かをするならば、あなたは困っています。イベントベースのアプリケーションでソケット付きのFILEストリームを本当に使用したい場合は、スレッドを使用してストリームを使用できるようにすることができます。

+0

ありがとうR ..!私の意図は、非同期接続を行うことでした。しかし、私はそれを順次プログラムにスケールダウンすることができます。しかし、少なくとも80の同時接続を処理できるものを探しています。これらの接続は、ノンストップデータを送信します。 – Poliquin

関連する問題