2

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

へのポインタFILEは、使用するファイルを決定するためにサードパーティのコードに渡されます。データは、のみを使用してファイルに書き込まれますfwrite()

ソケットとファイルの両方で機能するため、コードがwrite()代わりに使用する場合は、すべて問題ありません。これは、データ型と戻り値の両方であるファイル記述子として整数を想定しています。fwrite()write()socket()open()

ただし、サードパーティのコードはを使用するfwrite()ため、このタスクはそれほど簡単ではありません。このタスクを実行するための最良の方法は何でしょうか。

内部fwrite()で元の関数と同じ仕事をする関数fwrite()を書くべきですか?write()または、整数ファイル記述子を「キャスト」するハックはありますFILE*か?

4

1 に答える 1

3

FILE *次を使用して、ソケットを に変換できますfdopen

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

シーケンシャル データグラム プロトコル (つまり、UDP ソケットではなく Unix データグラム ソケット) を使用していることを願っています。そうしないと、データがおかしくなるからです。

UDP を使用している場合:パケットは任意に破棄したり並べ替えたりすることができます。また、 を使用するコードはFILE *ディスクへの書き込みを想定しているため、すべてを反対側にまとめようとすると、大きな混乱が生じます。

于 2012-04-05T09:08:00.403 に答える