C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

eigener streambuffer?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
thomas weidner
Guest





PostPosted: Tue May 18, 2004 10:10 pm    Post subject: eigener streambuffer? Reply with quote



Hi,

Ich bin dabei mir einen eigenen streambuffer zu schreiben, war soweit
fertig und mein puffer scheint auch groesstenteils zu funktionieren.
Jedoch habe ich dann mal ein Blick auf die G++ implementierung von
basic_filebuf geworfen. was ich gewundert hat,war das dort nirgends
eback() oder pbase() gesetzt werden. Wenn setbuf() aufgerufen wird,teile
ich den speicher in get,put und ggf. convertierungs (fuer
codecvt<>::in und out) area (ja schoenes denglish). Mache ich das richtig
so mit setg und setp puffer zu setzen, oder habe ich was falsch
verstanden? sollte das std::basic_streambuf schon machen oder der stream
der den streambuffer nutzt? (der sollte ja setbuf aufrufen,oder?) Ich bin
schwer verunsichert,da im Struppi auch recht wenig dazu steht. Bin fuer
hilfe oder links dankbar.

Thomas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Werner Salomon
Guest





PostPosted: Sat May 22, 2004 4:31 pm    Post subject: Re: eigener streambuffer? Reply with quote



thomas weidner <3.14159 (AT) gmx (DOT) net> wrote

Quote:
Ich bin dabei mir einen eigenen streambuffer zu schreiben, war soweit
fertig und mein puffer scheint auch groesstenteils zu funktionieren.
Jedoch habe ich dann mal ein Blick auf die G++ implementierung von
basic_filebuf geworfen. was ich gewundert hat,war das dort nirgends
eback() oder pbase() gesetzt werden. Wenn setbuf() aufgerufen wird,teile
ich den speicher in get,put und ggf. convertierungs (fuer
codecvt<>::in und out) area (ja schoenes denglish). Mache ich das richtig
so mit setg und setp puffer zu setzen, oder habe ich was falsch
verstanden? sollte das std::basic_streambuf schon machen oder der stream
der den streambuffer nutzt? (der sollte ja setbuf aufrufen,oder?) Ich bin
schwer verunsichert,da im Struppi auch recht wenig dazu steht. Bin fuer
hilfe oder links dankbar.

Hallo Thomas,
man unterscheidet bei der Implementierung von Derivaten von
basic_streambuf zwischen gepuffertem und ungepuffertem Input/Output.
Verwendest Du einen Buffer für Schreiben und Lesen, so hast Du eine
gepufferte Implementierung. Dann ist es nicht nur korrekt, sondern
auch zwingend notwendig mit setp bzw. setg die Lese- und Schreibzeiger
(eback(). pbase(), usw.) zu setzen.

Bei den mir bekannten Implementierungen von basic_filebuf wird jeweils
die ungepufferte Implementierung verwendet. Der Grund liegt meines
Wissens darin, dass die Pufferung tiefer im Betriebssystem sowieso
erfolgt und auf dem Level des Streambufs gar nicht notwendig ist. Also
wird hier auch kein setp,setg aufgerufen, weil hier der konkrete
streambuf auch keinen eigenen Buffer besitzt.
File-IO ist bei den üblichen Betriebssytemen etwas so rudimentäres,
dass hinter einer File-Schnittstelle (in Windows z.B. fputwc; schreibt
ein (!) Zeichen) ohnehin vom Betriebssystem her für eine performante
Bearbeitung gesorgt wird.
Eine Pufferung benötigt man genau dann, wenn man an der zur Verfügung
stehenden Schnittstelle zum Device hin auch mehr als ein Zeichen
schreiben bzw. lesen kann; und das dann auch performanter ist, als
einzelne Zeichen zu bearbeiten. Sockets sind ein gutes Beispiel
hierfür.

Zu 'setbuf':
Das sogenannte Buffermanagement innerhalb eines Streambufs wird aber
nicht über setbuf realisiert. Das Verhalten von setbuf ist im Prinzip
dem Programmierer des konkreten Streambufs überlassen! Von den
Standard-Streams wird setbuf nicht aufgerufen.
(siehe auch: <http://www.roguewave.com/support/docs/sourcepro/stdlibref/basic-streambuf.html>)

'setp' wird bei gepufferten Implementierungen i.A. in den Methoden
overflow, sync und/oder dem Konstruktor aufgerufen.

Gruß
Werner

Literatur:
Standard C++ IOStreams and Locales
von Angelika Langer, Klaus Kreft
Sprache: Englisch
Gebundene Ausgabe - 672 Seiten - Addison-Wesley Professional
Erscheinungsdatum: 1. Februar 2000
ISBN: 0201183951

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.