Hallo,
Am Fre, 27 Okt 2006, Torsten Foertsch schrieb:
On Thursday 26 October 2006 16:40, David Haller wrote:
Mein Punkt war: diese (und andere) Option ist nicht standardisiert,
und ist nicht bei jedem grep vorhanden. Teilweise selbst auf aktuellen
Unix-Systemen nicht.
In dem Fall kann man nach der Option des gerade verfügbaren Grep zum
Abschalten des gepufferten Schreibens fahnden. Falls es diese nicht gibt,
kann man immer noch ein Pseudoterminal dafür benutzen. Kein Grep puffert den
Output, wenn er auf ein Terminal schreibt. Das Ganze erfordert ein paar
Zeilen Perl- oder C-Code. Das Perl-Modul IPC::Run kann dabei vielleicht
helfen. Vielleicht gibt es sowas auch irgendwo in den Weiten des Internet
schon fertig.
==== mklinebuffered.c ====
#include
#include
#ifndef BUFSIZ
# define BUFSIZ 8192
#endif
int main(void) {
char buf[BUFSIZ+1];
while( fgets( (char*)&buf, BUFSIZ, stdin) == buf ) {
if( fputs( (char*)&buf, stdout) == EOF ) {
perror("");
exit(errno);
}
if( fflush(stdout) != 0 ) {
perror("");
exit(errno);
}
}
return 0;
}
====
$ make mklinebuffered
$ ./mklinebufferd < ./FIFO | grep test
Das scheint zu funktionieren, solange das Programm, das nach ./FIFO
schreibt nach seinen Ausgaben den Buffer "flushed".
Beispielsweise:
$ perl -e '$|=1;while(<>) { print $_;};' > ./FIFO
Zu beenden mit Strg+d.
HTH,
-dnh
--
Wenn diese Liste über Mailman betrieben würde, dann würden wir den
ganzen Tag nichts anderes machen als eine Menschenkette zum nächsten
Computerladen aufrechtzuerhalten um RAM in einem konstanten fluss in
lists.suse.com einzubauen ;) -- suse-linux-owner, ebenda