Pipe - Buffer

Post Reply
Message
Author
falko
Posts: 18
Joined: 04. Feb 2000 14:40

Pipe - Buffer

#1 Post by falko »

Hi ihrs

ich haette da gern mal ein problem ..

letztens habe ich mir ein shellskript gebastelt mit dem ich einen htmlchat im xterm nutzen kann

alles schoen und gut ..

laeuft auch

ABER: <-- waer ja sonst zu schoen


wget -O - url.de/bla

zeigt auch fein alles an natuerlich mit htmlkram

diese ding pipe ich nun in ein perlskript um die htmlteile rauszzubekommen funktioniert einwandfrei

nur sobald ich von wget -O - url
irgendwie pipe oder in eine datei schreibe cached linux die daten und ich kriege vom chat nur alle 40 sekunden alles auf einmal
das is exrem unpraktisch ..

dabei isses egal ob ich

wget .. |perlskrip
wget .. >datei
wget -O datei ..
wget .. |tee bla
wget .. |sed ...
lynx -dump |irgendwas (der zeigt naemlich auch den quelltext auch bei -force_html)

benutze ..

ergo musses entweder an der pipe liegen oder am cache selbst (falls auch pipehandles gecacht werden kenn mich da net allzugut aus)

hat da irgendwer loesungsideen ?

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: Pipe - Buffer

#2 Post by hjb »

hi,

ich weiß nicht, ob ich es ganz verstanden habe, aber das Problem ist wohl, daß wget seine Ausgabe puffert? Dann mußt du wohl wget hacken...

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

falko
Posts: 18
Joined: 04. Feb 2000 14:40

Re: Pipe - Buffer

#3 Post by falko »

seltsamerweise wird bei

wget -O - url.de/bla

der text genau in der richtigen geschwindigkeit auf der konsole
ausgegeben erst duc die pipe wird das teil verlangsamt ..

kann ein programm erkennen
ob seine ausgabe (die ja in der richtigen geschwindigkeit ist) in eine pipe kommt ?


PS:
warum klappt
print "GET /bla
"|telnet url.de 80

nicht ?
Last edited by falko on 29. Jun 2000 10:26, edited 1 time in total.

Jochen

Re: Pipe - Buffer

#4 Post by Jochen »

Typischerweise wissen Programme, die auf stdout schreiben, nicht das geringste davon, wo die Daten letztendlich landen: Pipe, Datei, Terminal... Ganz egal. Dein Problem dürfte darin begründet liegen, dass beim Schreiben auf ein Terminal "nur" über die line discipline gebuffert wird (tty1-tty12, ttyS[01] sind ja schliesslich character device files). Also nur zeilenweises Buffern; wird das tty explizit in CBREAK oder RAW Modus versetzt, wird gar nicht mehr gebuffert und die Zeichen kommen einzeln an. Sobald aber in "andere" Dateien geschrieben wird (normale Files, Pipes, block device files,...) wird wesentlich aggressiver gebuffert.

Ggf. ist es am einfachsten, tatsächlich wget zu hacken, ein fflush() nach den Ausgabe-printf()s könnte es vielleicht schon richten...

Zum P.S.: Entweder die Anfrage muss ganz korrekt "GET /bla HTTP/1.0" lauten, oder Dein telnet-Client unterstützt das Lesen von stdin nicht. Kommt häufiger vor, weiss nicht, wie sich der Linux-telnet da verhält. Statt dessen einfach nc nehmen (netcat). Löst aber Dein Buffer-Problem nicht, da die Daten - ob nun aus telnet oder nc - irgendwie durch die gebufferte Pipe laufen müssen.

falko
Posts: 18
Joined: 04. Feb 2000 14:40

Re: Pipe - Buffer

#5 Post by falko »

hey das wars ..

danke !

Post Reply