PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : printf ohne \n



mattn
29-07-2006, 09:57
Hi, ich habe eine kleine Frage zu printf

normalerweise wird eine zeile ja erst ausgegeben, wenn man ein \n hinten dran hängt. nun will ich aber eine art fortschrittsanzeige machen. 0...1...2...3....4 .. [] ...10
wie bekomme ich es hin, dass er mir 0... ausgibt ohne den rest zu haben - ein \n geht da ja nicht - unter windows geht das einfach ohne \n am ende (erst nach dem ...10) - unter linux nicht.

gruß
martin

Joghurt
29-07-2006, 12:31
Auf ungepufferte Ausgabe umschalten. Oder einfach gleich einen ungepufferten Ausgabestream nutzen, wie z.B. stderr. Das hat den Vorteil, dass der Fortschrittsbalken auch nicht in die Datei geschrieben wird, wenn du die Ausgabe deines Tools in eine Datei mit ">" lenkst:

fprintf(stderr,".");

panzi
29-07-2006, 14:42
Besser ist ja wohl den filestream es zu sagen, wenn man will das ausgegeben werden soll:


fprintf(stdout,"...");
fflush(stdout); /* <- entleert den puffer, sprich gibt ihn aus */

Joghurt
29-07-2006, 14:48
Besser ist ja wohl den filestream es zu sagen, wenn man will das ausgegeben werden soll:Aus dem oben genannten Grunde halte ich das für suboptimal. Progressbars haben (meine Meinung nach) in stdout nichts zu suchen.

panzi
29-07-2006, 21:10
Aus dem oben genannten Grunde halte ich das für suboptimal. Progressbars haben (meine Meinung nach) in stdout nichts zu suchen.
Und hat das in stderr was zu suchen? Wohl noch weniger, finde ich. Wenn es "graphische" bzw., nicht maschinen auswertbare outputs gibt, dann gehören die auf stdout. stderr sollte wenn möglich einen gewissen schema entsprechen und event. parsebar sein. Find ich halt.
ncurses schreibt ja auch auf stdout, oder? Und macht wget die Progressbar nicht auch auf stdout? Eine Progressbar ist keine Fehlermeldung. Warum sollte die auf den Standard-ERROR-Stream ausgegeben werden?

Joghurt
29-07-2006, 21:13
Und hat das in stderr was zu suchen? Wohl noch weniger, finde ich.Da hast du wohl recht. Es hat sich jedoch inzwischen als Quasi-Standard durchgesetzt, fast jedes CLI-Programm, dass Fortschritts- oder Informationsanzeigen machen, zeigt diese auf stderr an. Wget ist jetzt nur ein Beispiel.
Und in stderr ist immer noch besser als nach stdout. Wer beachtet denn heutzutage noch stderr, außer einem 2> /dev/null zu machen?

mattn
30-07-2006, 19:21
danke, klappt sehr gut