Czy powinienem używać deskryptorów plików lub strumieni do odczytu / zapisu do gniazd

Czy po skonfigurowaniu gniazda lepiej jest użyć wywołań read (2) i write (2) na deskryptorze gniazda lub powiązać strumień z deskryptorem gniazda za pomocą fdopen (3), a następnie użyć funkcji stdio (3) ?

int sfd = socket(PF_INET, SOCK_STREAM, 0);
// setup the socket using sfd
FILE * stream = fdopen(sfd, "r+");
// use fprintf, fscanf, etc

EDYTUJ: Odblokowuję również strumień

setbuf(stream, NULL)

Aby uniknąć konieczności opróżniania go, jak wspomniano w komentarzach.

Korzystam z tego podejścia, ponieważ pozwala mi ponownie wykorzystać kod napisany dla strumieni FILE * i mam tę zaletę, że mogę używać ciągów formatujących (pracuję z tekstem czytelnym dla człowieka). GNU wydaje się sugerować, że to dobry pomysł.

http://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html

Jednak zazwyczaj, gdy widzę kod używający gniazd, deskryptor gniazda jest używany zamiast strumienia dla wszystkich operacji. Czy korzystasz z funkcji niższego poziomu?

questionAnswers(1)

yourAnswerToTheQuestion