Koks skirtumas tarp skaitymo () ir recv () ir tarp siuntimo () ir rašymo ()?

Koks skirtumas tarp skaitymo () ir recv () ir tarp siuntimo () ir rašymo () skirtumų tarp lizdų programavimo? greitis ir kitas elgesys.

140
24 нояб. nustatė sjb 24 nov. 2009-11-24 18:20 '09, 18:20, 2009-11-24 18:20
@ 6 atsakymai

Vienintelis skirtumas yra tas, kad recv / send leidžia nurodyti tam tikrus faktinės operacijos parametrus. skaitymo / rašymo funkcijos yra universalios failų deskriptoriaus funkcijos, o recv / send yra šiek tiek labiau specializuota (pvz., galite nustatyti, kad vėliava ignoruotų SIGPIPE arba siųsti laiškus ...).

88
24 нояб. atsakymą pateikė Gonzalo 24 nov. 2009-11-24 18:24 '09, 18:24, 2009-11-24 18:24

„Google“ pirmajame paspaudime

read () yra lygiavertis recv () su vėliavos parametru 0. Kiti vėliavos parametrų reikšmės keičia recv () elgesį. Panašiai rašyti () yra lygiavertis siuntimui () su vėliavomis == 0.

68
24 нояб. Atsakymą pateikė Jonathan Feinberg . 2009-11-24 18:24 '09, 18:24, 2009-11-24 18:24

read() ir write() yra labiau universalūs, jie dirba su bet kokiu failų aprašu. Tačiau jie neveiks „Windows“.

Galite perduoti papildomus send() ir recv() parametrus, taigi jums gali tekti juos naudoti kai kuriais atvejais.

7
18 янв. Bastien Léonard atsakymas 18 sausio. 2010-01-18 20:10 '10, 20:10, 2010-01-18 20:10

Neseniai pastebėjau, kad kai aš naudoju write() Windows lizdą, jis beveik veikia (FD, perduotas write() neatitinka send() , aš naudoju _open_osfhandle() kad _open_osfhandle() perkelti FD write() ) . Tačiau tai neveikė, kai bandžiau siųsti dvejetainius duomenis, turinčius simbolį 10. write() kažkur įterptojo simbolio 13 anksčiau. Pakeitus jį send() su vėliavos parametru nuo 0, ši problema buvo išspręsta. read() gali turėti atvirkštinę problemą, jei 13-10 yra iš eilės dvejetainiais duomenimis, bet aš jų nebandžiau. Tačiau tai atrodo dar vienas galimas skirtumas tarp send() ir write() .

6
07 июня '13 в 20:05 2013-06-07 20:05 atsakymą pateikia „ ajb “ birželio 7 d. 13 d. 20 val. 2013-06-07 20:05

Kitas dalykas apie „Linux“:

send neleidžia dirbti su ne socket fd. Taigi, pavyzdžiui, write reikia write USB prievadą.

3
22 сент. Mert Mertce atsakymas rugsėjo 22 d 2015-09-22 16:40 '15 , 16:40 2015-09-22 16:40

„Našumas ir greitis“? Argi ne ... čia sinonimai?

Bet kuriuo atveju, recv() skambučiu priimamos vėliavos, kurios read() ne, todėl jis tampa galingesnis arba bent jau patogesnis. Tai yra vienas skirtumas. Nemanau, kad esama didelių rezultatų, tačiau jų nėra.

3
24 нояб. Atsakymas yra atleistas nuo lapkričio 24 d. 2009-11-24 18:24 '09, 18:24, 2009-11-24 18:24

Kiti klausimai apie žymes arba Užduoti klausimą