[ db@traceroute.dk ]
[ ... ]
> Ok, nogen eksempler på hvordan jeg skal gøre det? Altså socket
> programmering uden read() og write()?
Du er naturligvis nødt til å bruke read/write fra det underliggende
OSet i stream buffer *implementasjonen*, men det er igrunn det eneste
stedet der man ikke slipper unna. C++ applikasjonskoden trenger aldri
å bry seg om disse funksjonene.
> > Boken til Langer && Kreft inneholder alle de interessante
> > detaljene.
>
> En gang til?
ISBN 0201183951
[ ... ]
> Ved det ikke, men vil følgende så ikke virke? &adresse[0].c_str
Problemet er at c_str behandler C-style strings. Der brukes '\0' for å
betegne slutten av teksten, noe som er _uhyre_ idiotisk i alle
tenkelige kontekster siden hukommelsen er sluttet å bli astronomisk
dyr (i god tid før jeg ble født, tipper jeg). std::string kan godt
inneholde '\0'-bytes i seg, og nettopp da vil man få problemer dersom
man velger å bruke c_str for å "konvertere" en std::string til en
const char*.
Med nød vil man ha std::string::data(), men aller helst vil man skrive
en abstraksjon som tillater å gjøre std::getline() og op<<() på
network "streams" på lik linje med file streams. Og da vil man kunne
gjøre noe sånt:
using namespace std;
itcpstream its( "
www.somehost.net", SOURCE_PORT );
if ( !its )
exit( 1 );
std::string line;
while ( getline( its, buffer ) )
process( line );
.... noe som er identisk med en filløsning.
(Dog, for å være helt rettferdig må det sies at C++ IO streams har
read/write kall. Og de er _like_ hjerneskadede som read/write i
*nix-aktig C omgivelse. Men det er ingenting som forhindrer en fra å
fx. bruke stream iterators. Dessverre blir man kanskje nødt til å
jobbe litt for å få det til å gå fort).
ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
-- pederst på irc