Stephan Goetter wrote:
Nabend,
Meiner Erfahrung nach hat das nichts mit einem "\n" am Ende zu tun. z.B. hatte ich vor kurzem eine komplette Ausgabe, wenn stdout in eine Datei ging,allerdings eine unvollständige bei der Ausgabe ins Terminal. Natürlich endete das Programm beides mal mit SegFault.
Kann mal jemand das mit dem Puffern genauer erläutern ??
Hm. Obiges Phaenomen ist mir ganz neu.
Was soll denn zum Puffern erlaeutert werden ? Ich versuche mal 'nen Anfang, gestehe aber gleich, dass ich die ganz genauen Linux-Interna nicht kenne ...
Also, saemtlichen schreibenden und lesenden Ausgaben in die Dateisysteme sind Ein- und Ausgabe-Puffer nach-/vorgeschaltet.
Soll aus einer Datei gelesen werden, wird erst im Puffer geschaut, ob der Teil der Datei schoneinmal gelesen wurde. Nur wenn die Daten nicht im Puffer sind, werden sie wirklich von der Platte gelesen ...
Entsprechend wird beim Schreiben alles zuerst in den Schreibpuffer geschrieben und erst wenn der Puffer voll ist, wirklich auf die Platten geschrieben ... (ausserdem etwa jede Minute einmal, sowie auf ausdruecklichen Wunsch)
Auf Terminals erfolgt AFAIK die Ein- und Ausgabe zeilenorientiert. Deswegen wird der Puffer nur immer bis zum naechsten Newline gefuellt und dann auf das Terminal geschrieben ...
Wenn du die Ausgaben wirklich in Sicherheit wissen willst, kannst du ja nach jedem write noch ein flush() machen, dann sind sie wirklich in Sicherheit. (aber meiner Erfahrung nach reicht ein \n)
... wie gesagt, die wirklich Linux-Interna kenne ich nicht ...
Bye.
Jens