# Ausgabeumleitung ">", "tee" unvollständig



## lothar_matthäus (2. März 2012)

Hallo alle zusammen,

ich habe gerade ein Problem mit der Ausgabeumleitung in Linux.
Ich lasse ein C-Programm auf der Konsole laufen und bekomme über die printf-Funktion Ausgaben.
Soweit ok! 
NUN: wenn ich die Ausgabe in eine Datei Umleite bekomme ich nichtmehr alles ausgeben... .
(weder direkt mit ">" noch bei "tee" auf den Monitor)

Abfolge in kurzen Worten von dem Programm:
Anfängliche einmalige Ausgabe einiger Zeilen.
Dann rechnet es und gibt ab und zu ein Ergebnis aus.
Nun will ich wissen wie lange der Rechner braucht um die Ergebnisse zu errechnen.
Und genau das wird bei der Umleitung nichtmehr mit ausgegeben.

Hat jemand eine Idee warum?
Im allgemeinen funktioniert die Ausgabe ja IMMER nur speziell hier nicht.
Es kann bestimmt nicht an den Ausgabeintervallen liegen das sind vielleicht 10 ausgaben nach 1Sekunden und dann wird es immer weniger zb 3 nach 2Sekunden 1 nach 10Sekunden usw...


----------



## deepthroat (2. März 2012)

Hi.

Mit > leitest du ja nur die Standardausgabe um.

Evtl. fehlt dann einfach das was auf die Fehlerausgabe geschrieben wird?

Ansonsten müßtest du schonmal etwas konkreter werden und z.B. ein Minimalbeispiel machen.

Gruß


----------



## lothar_matthäus (2. März 2012)

Danke für die schnelle Antwort.

Genau ich möchte die Standardausgabe in eine Datei umlenken.
(Ich kann das auch direkt im C-Code machen vesteh aber nicht warum es mit ">" nicht geht)

Das Kuriose, wenn ich vor der unten genannten Passage noch eine Ausgabe setze funktioniert es.

t_start wurde am Programmanfang initialisiert.


```
/*Speichern und Ausgabe MIN MAX*/
				if(E_min_Koord<Enew){
					E_min_Koord=Enew;
				        messung_t=time(NULL);
					if(difftime(messung_t,start_t)>1){
						printf("Zeit von Progstart gemessen: %3.f\n",difftime(messung_t,start_t));
					}

				}
				if(E_max_Koord>Enew){
					E_max_Koord=Enew;
				        messung_t=time(NULL);
					if(difftime(messung_t,start_t)>1){
						printf("Zeit von Progstart gemessen: %3.f\n",difftime(messung_t,start_t));
						printf("\ntest\n");
					}
				}
```


----------



## deepthroat (2. März 2012)

Kann es sein, das dein Programm einfach unter 2 Sekunden fertig ist... ?

Wie lange braucht denn dein Programm wenn du es "normal" ausführst?

\edit: I/O auf ein Terminal ist um ein Vielfaches langsamer als in eine Datei (gepuffert).

Gruß


----------



## lothar_matthäus (2. März 2012)

Ich hatte auch erst gedacht, dass die Ausgaben zu schnell ist, darum habe ich die Sekunde abgewartet.
Das Programm braucht mehrere Stunden bis es fertig ist und die Ausgabeintervalle für die Zeit werden auch immer länger. (ist eine MC-Simulation)

Das Puffern kann man ja bei "tee" (Bsp: ./a.out | tee output.dat) ganz gut beobachten, bis jetzt war es bei anderen Ausgaben auch immer problemlos und gibt alle paar Sekunden etwas aus.

Eine Ebene über der If-Bedingung  die die Zeit ausgibt gibt es noch eine If-Bed. die nur eine Rechnung ausführt, wenn ich dort noch eine Printausgabe setze funktioniert es... .

Kann das auch ein Bug sein?


----------



## genodeftest (2. März 2012)

Schau mal, was 
	
	
	



```
befehl | less
```
 macht.


----------



## lothar_matthäus (2. März 2012)

@ genodeftest:
bei
	
	
	



```
a.out | less
```
  wird auch nur die Printausgabe vom vorderen Teil des Programmes 
ausgegeben jedoch nicht die besagte Stelle... .


----------

