[linux-l] vim fragen

Steffen Solyga solyga at absinth.net
Mi Nov 13 16:58:55 CET 2002


Citing Oliver Bandel (Wednesday, 2002/11/13  3:16)...

> On Wed, Nov 13, 2002 at 01:16:21AM +0100, Steffen Solyga wrote:
> > - auch wenn nicht explizit festgeschrieben: read(2) gibt spätestens
> >   dann die Kontrolle an das aufrufende Programm zurück, wenn es auf
> >   ein '\n' stößt
> Wie kommst Du denn auf den Trichter?
> 
> Du meinst vermutlich das gepufferte Schreiben mit
> mit der ANSI-C-Lib, wo das "\n" beim Schreiben
> aus stdout erst mit einem "\n" dazu veranlasst wird,
> die Daten raus zu schreiben, oder wenn der Puffer
> bereits aufgefüllt ist, in den gepuffert wird.
> Bei stderr ist es ohnehin alles ungepuffert.

Du hast Recht, war etwas voreilig geschlossen. Wie sich read(2)
verhält, hängt wohl von der Dateiart ab, die gelesen wird.
Wenn man von stdin (ohne Umlenkung) liest, ist es aber so, wie
ich sagte.

#include        <stdio.h>
#include        <unistd.h>
int main() {
  unsigned char buf[128];
  int nbr= 1;
  int tnbr= 0;
  while( nbr ) {
    if( (nbr=read(STDIN_FILENO,buf,128)) == -1 ) {
      fprintf( stderr, "read error\n" );
      exit( 1 );
    }
    tnbr+= nbr;
    fprintf( stderr, "%d bytes read\n", nbr );
  }
  fprintf( stderr, "%d bytes read total\n", tnbr );
  exit( 0 );
}

Ist wohl eher als Ausnahme zu betrachten. Schon per pipe stimmt's
nicht mehr.


-- 
--------------------------------------------
Steffen Solyga
mail: solyga at absinth.net
www : http://www-tet.ee.TU-Berlin.DE/solyga/
--------------------------------------------



Mehr Informationen über die Mailingliste linux-l