PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : prinzipielle Funktion von usleep()



09-10-2000, 23:19
Hallo,

ich verstehe die Funktion usleep nicht so recht. Folgendes Programm soll 10 Punkte im Abstand von z.B. 5 Sekunden ausgeben.
Kompiliert & ausgeführt passiert aber 5 Sekunden lang nichts, bis dann alle Punkte auf einmal erscheinen!
Weiß jemand, was ich falsch mache?

Beim Verwenden von sleep statt usleep klappts übrigens genausowenig http://www.linuxforen.de/ubb/frown.gif

Ich kompiliere folgendermaßen:
gcc -c x.c
gcc -o x x.o

Danke schonmal im Vorraus, Sion

============ x.c ============<pre>
#include |stdio.h|
#include |unistd.h|

int main()
{
int i;
for (i=0; i < 10; i++)
{
printf(",");
usleep(5000);
}
}
</PRE>
[Dieser Beitrag wurde von Sion am 09. Oktober 2000 editiert.]

[Dieser Beitrag wurde von Sion am 09. Oktober 2000 editiert.]

10-10-2000, 11:18
Ich weiß nicht genau, aber ich glaube das liegt an der Ausgabe.
Und zwar hatte ich auch mal das selbe Problem.
Ich glaube bei Linux wird nur eine ganze Zeile ausgegeben. Also erst wenn die Zeile voll ist oder wenn du einen Zeilenumbruch machst.

Aufjeden Fall kann ich dir sagen das es nicht an sleep bzw. usleep liegt.

10-10-2000, 17:32
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von WWG2000:
Ich weiß nicht genau, aber ich glaube das liegt an der Ausgabe.
Und zwar hatte ich auch mal das selbe Problem.
Ich glaube bei Linux wird nur eine ganze Zeile ausgegeben. Also erst wenn die Zeile voll ist oder wenn du einen Zeilenumbruch machst.

Aufjeden Fall kann ich dir sagen das es nicht an sleep bzw. usleep liegt.[/quote]

Da lag ich ja dann gar nicht so sehr falsch mit der Vermutung, daß die Ausgabe gecached ausgegeben wird. Ich sehe zwar keinen Grund die Ausgabe zu cachen und habe auch noch nie was davon gelesen, Windows ist da wohl (zum Glück) zu dumm dafür, aber schön, daß ich da nicht der einzige bin, der auf die Nase gefallen ist.
So wie's aussieht schrieb er bei meinem kleinen Testproggi die Zeile erst beim Beenden.

Danke, Sion

thommy
16-10-2000, 09:08
Es stehen Dir (mind.) 3 Möglichkeiten offen, die sofortige Ausgabe zu erzwingen:

<ol>
Aufruf von "fflush(stdout);" nach dem "printf"</li>
Schreiben der Ausgabe auf stderr: "fprintf(stderr, ".");</li>
Abschalten der Pufferung auf dem Device mittels "ioctl(...)" (ist etwas kompliziert...)</li>
[/list=a]

Thomas