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.
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...).
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.
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.
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()
.
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.
"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.