ソケットの設定後、ソケット記述子でread(2)およびwrite(2)呼び出しを使用するか、ソケット記述子はfdopen(3)を使用してからstdio(3)関数を使用しますか?ソケットへの読み書きにファイル記述子またはストリームを使用する必要があります
int sfd = socket(PF_INET, SOCK_STREAM, 0);
// setup the socket using sfd
FILE * stream = fdopen(sfd, "r+");
// use fprintf, fscanf, etc
編集:私もストリームバッファー解除
setbuf(stream, NULL)
コメントで述べたように、それをフラッシュすることを避けるために。
私はFILE *ストリーム用に書かれたコードを再利用できるので、この方法を使用しています。フォーマット文字列を使用できるという利点があります。 GNUはこれが良い考えであると示唆しているようです。
http://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html
私はソケットを使用してコードを参照してくださいしかし、通常は、ソケット記述子ではなく、すべての操作のためのストリームの使用されています。下位レベルの機能を使用する利点はありますか?
Cファイルストリームはデフォルトでバッファリングされているので、送信するときには自分でフラッシュすることを忘れないように注意してください。また、ソケットを非ブロックにしても読み込みがブロックされることがあります。 –
ラップされたI/Oでのパフォーマンスが十分で、コードを単純なままにしておけば、そのまま使用してください。 – paddy
私の意見では、read()とwrite()はエラー状態をより直接的に処理します。 – thuovila