Ich möchte die Pufferung für die Standardausgabe deaktivieren, um das genaue Ergebnis für den folgenden Code zu erhalten
while(1) {
printf(".");
sleep(1);
}
Der Code printf Haufen von ‘.’ nur wenn Puffer gefüllt wird.
Ich möchte die Pufferung für die Standardausgabe deaktivieren, um das genaue Ergebnis für den folgenden Code zu erhalten
while(1) {
printf(".");
sleep(1);
}
Der Code printf Haufen von ‘.’ nur wenn Puffer gefüllt wird.
Friedrich Rabe
Du kannst den … benutzen setvbuf-Funktion:
setvbuf(stdout, NULL, _IONBF, 0);
Hier sind einige andere Links zu der Funktion.
Gut. Danke. Übrigens setbuf(stream, NULL);
ist äquivalent zu setvbuf(stream, NULL, _IONBF, BUFSIZ);
– sehen
24. Oktober 2011 um 14:02 Uhr
Eine Einschränkung: Es ist nur legal anzurufen setbuf
oder setvbuf
als die ersten Operation auf einem Stream, bevor eine Eingabe oder Ausgabe darauf ausgeführt wird. Also mit fflush
explizit ist normalerweise eine bessere Idee.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
24. Oktober 2011 um 14:56 Uhr
Sie können auch setbuf verwenden
setbuf(stdout, NULL);
Dies wird sich um alles kümmern
Dies ist keine sehr gute Antwort, wenn man Newlib zitiert: Both ANSI C and the System V Interface Definition (Issue 2) require <<setbuf>>. However, they differ on the meaning of a <<NULL>> buffer pointer: the SVID issue 2 specification says that a <<NULL>> buffer pointer requests unbuffered output. For maximum portability, avoid <<NULL>> buffer pointers.
– Mächtiges Schweinefleisch
4. März 2016 um 23:16 Uhr
@MightyPork Newlib ist einfach spitze falsch. Die POSIX 2-Spezifikation für setbuf()
Zustände: “setvbuf(stream, buf, _IONBF, BUFSIZ)
wenn buf ein Nullzeiger ist.” _IONBF
bedeutet ungepuffert Beide Posix 7 und die C-Norm alle stimmen zu und haben zugestimmt Jahrzehnte.
– Andreas Henle
13. Februar 2020 um 22:00 Uhr
NickLH
Verwenden fflush(FILE *stream)
mit stdout
als Parameter.
Dadurch wird die Pufferung nicht deaktiviert, sondern der Puffer wird einmal geleert.
– David Cleland
8. Oktober 2020 um 14:23 Uhr
Michael Ciocca
Du kannst das:
write(1, ".", 1);
an Stelle von:
printf(".");
tdenniston
Verwenden fflush(stdout)
. Sie können es nach jedem verwenden printf
aufrufen, um das Leeren des Puffers zu erzwingen.
Dies “schaltet das Puffern von stdout in C nicht wirklich aus”.
– Hagello
17. Dezember 2014 um 10:01 Uhr
Dies “schaltet das Puffern von stdout in C nicht wirklich aus”.
– Hagello
17. Dezember 2014 um 10:01 Uhr
mögliches Duplikat von Warum wird printf nach dem Aufruf nicht geleert, es sei denn, ein Zeilenumbruch ist in der Formatzeichenfolge? (in C)
– Dunkler Staub
24. Oktober 2011 um 14:05 Uhr
Kandidat für Fragen, die bei StackOverflow am häufigsten gestellt werden.
– Dunkler Staub
24. Oktober 2011 um 14:06 Uhr
Mögliches Duplikat von Warum wird printf nach dem Aufruf nicht geleert, es sei denn, ein Zeilenumbruch ist in der Formatzeichenfolge?
– SS Anne
22. August 2019 um 11:04 Uhr