2012-04-05 5 views
2

ファイルにデータを書き込むサードパーティのCコードがあります。そのコードを変更して、まったく同じデータをデータグラムソケットに書き込むようにします。ファイルの代わりにデータグラムソケットを使用するようにPOSIX Cコードを書き換える方法

FILEへのポインタは、使用するファイルを決定するためにサードパーティのコードに渡されます。データは、fwrite()を使用して排他的にファイルに書き込まれます。コードは、ソケットとファイルの両方にfwrite()write()ため作品の代わりにwrite()を使用する場合は

すべてが正常になります。これは、データ型であるファイル記述子として整数が期待されます。socket()open()が返されます。

ただし、サードパーティのコードではfwrite()が使用されているため、この作業は容易ではありません。私はこの仕事を終わらせるための最良の方法は何だろうかと思います。

fwrite()と同じ仕事をすると、fwrite()と内部的にwrite()を使用してください。または、整数ファイル記述子をFILE*に "キャスト"するためのハックがありますか?

答えて

3

あなたはfdopenを使用してFILE *にソケットを回すことができます。

FILE *fdopen(int fd, const char *mode); 

そうでない場合は、あなたのデータがあるので、私は、あなたがシーケンシャルデータグラムプロトコル(すなわち、Unixのデータグラムソケットではなく、UDPソケット)を使用している願っていますうんざりしてしまいます。

あなたはUDPを使用している場合:パケットが任意に廃棄されるか、または再注文することができを、そしてFILE *を使用してコードは、それがディスクへの書き込みだことを前提としているので、あなたがすべてを置くしようとしたとき、あなたは大きな混乱を取得します一緒に反対側に。

+0

UDPを使用していただきありがとうございます。この問題が発生した場合は、代わりにTCPを使用することを検討します。 – MBober

+0

あなたは**この問題に遭遇します**、それを防ぐ方法はありません.TCPを使うか、UDPの上に独自の信頼できるプロトコルを書いてください。さらに、書き込みバッファーが大きすぎると、UDPを使用している場合、パケットは常に破棄されます。 –

関連する問題