[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Debian]: Paketgroesse bei named pipes



Hi

Volker Hejny wrote:

> On Wed, 8 Apr 1998, Andre Beck wrote:
> [...]
>
> Aber im Prinzip hatte mich auch nicht gestoert, dass ich keine atomaren
> Operationen mit Bufferlaenger groesser 4k machen kann, sondern mich hat
> das unterschiedliche Verhalten irritert.
> Angenommen ich habe einen Prozess, der mit write() 8k grosse
> Pakete in die Pipe schickt. Nun lese ich mit read(fd,buf,8192).
> Dann geschieht folgendes:
>
> - Unter Linux bekomme ich bei jedem read-Befehl 4k zurueck,
> - unter Digital Unix z.B. bekomme ich bei jedem read Zugriff die an-
>   geforderten 8k Daten.
>
> Hier koennte man mit dem evtl. groesseren Buffer bei DU argumentieren
> und die Welt waere in Ordnung. (Allerdings ist der Buffer bei DU
> AFAIK nicht groesser, aber da lasse ich mich gerne belehren.)
>
> Was nun seltsam ist und nicht zusammenpasst, ist folgendes:
>
> Wenn ich nun statt 8k Pakete solche mit 512 Laenge schicke (und
> trotzdem ein read(,,8192) mache), habe ich folgendes Ergebnis:
>
> - Unter Linux bekomme ich 512 Byte Haeppchen, also soviel, wie ich
>   geschrieben habe.
> - Unter DU bekomme ich aber weiterhin die vollen angeforderten
>   8k Daten!
>
> Und das verstehe ich auch immer noch nicht. Da ich bisher nur
> unter DU Erfahrungen mit Pipes hatte, hat mich das Verhalten von
> Linux doch etwas ueberrascht. Was ist denn nun "richtig" ?

Ich interpretiere es so, daß beides "richtig" ist. Wenn Du sicher gehen
willst
verlasse Dich nur auf die minimale Konvention bzgl. read(), und die besagt
das es mindestens 1 Byte liefert. Ausnahme, der Filedeskriptor (bzw. das
Objekt
auf das dieser zeigt) ist vorher in den non-blocking mode geschaltet worden,
z.B. bei sockets. Wenn Du eine Mindestmenge zur Verarbeitung haben willst,
mußt Du in Deinem Programm eine Schleife haben, die einen eigenen Puffer
füllt, indem sie read() oft genug aufruft.
Eine Abhängigkeit zwischen den Paketgrößen von Sender und Empfänger
vorrauszusetzen, ist es auch nicht zu empfehlen, wenn Du nicht irgendwann
mal Überraschungen erleben willst.
Tu am besten so, als ob Du die Implementation der jeweiligen Gegenseite
nicht kennst, und Du Dich nur auf den Dateninhalt verlassen kannst.

Ciao, Olli



------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <your_email_address>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     423


Reply to: