Quelle est la Différence Entre lire() et recv () et send() et write()?

Quelle est la différence entre lire() et recv () et send() et write() dans le support de la programmation ? performance et la vitesse et d'autres comportements.

157
demandé sur SjB 2009-11-24 18:20:52

6 réponses

La seule différence est que recv / send vous permet de spécifier certaines options pour l'opération réelle . read / write sont les fonctions de descripteur de fichier' universal ' tandis que recv / send sont légèrement plus spécialisées (par exemple, vous pouvez définir un drapeau pour ignorer SIGPIPE, ou pour envoyer des messages hors bande...).

102
répondu Gonzalo 2009-11-24 15:24:51

Par le premier coup sur Google

Read() est équivalent à recv() avec un paramètre flags de 0. D'autres valeurs pour le paramètre flags modifient le comportement de recv (). De même, write () est équivalent à send () avec flags = = 0.

73
répondu Jonathan Feinberg 2009-11-24 15:24:30

read() et write() sont plus génériques, ils fonctionnent avec n'importe quel descripteur de fichier. Cependant, ils ne fonctionneront pas sur Windows.

, Vous pouvez passer des options supplémentaires à send() et recv(), de sorte que vous peut-être utilisé dans certains cas.

10
répondu Bastien Léonard 2010-01-18 17:10:57

Je viens de remarquer récemment que lorsque j'ai utilisé write() sur un socket dans Windows, il fonctionne presque (FD passé à write() n'est pas le même que celui passé à send(); j'ai utilisé _open_osfhandle() pour obtenir le FD de passer à write()). Cependant, cela n'a pas fonctionné quand j'ai essayé d'envoyer des données binaires qui incluaient le caractère 10. {[0] } quelque part inséré le caractère 13 avant cela. Le changer en send() avec un paramètre flags de 0 a résolu ce problème. read() pourrait avoir le problème inverse si 13-10 sont consécutifs dans les données binaires, mais je n'ai pas testé. Mais cela semble être une autre différence possible entre send() et write().

7
répondu ajb 2016-02-23 10:05:50

Une autre chose sur linux est:

send ne permet pas de fonctionner sur non-socket fd. Ainsi, par exemple, pour écrire sur le port usb, write est nécessaire.

5
répondu Mert Mertce 2015-09-22 13:40:58

"Performance et vitesse"? Ne sont pas ceux du genre ... synonymes, ici?

Quoi qu'il en soit, l'appel recv() prend des drapeaux que read() ne fait pas, ce qui le rend plus puissant, ou du moins plus pratique. C'est une différence. Je ne pense pas qu'il y ait une différence de performance significative, mais je n'ai pas testé pour cela.

3
répondu unwind 2009-11-24 15:24:24