So deaktivieren Sie die Pufferung von stdout in C

Lesezeit: 2 Minuten

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.

  • 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

Benutzeravatar von Frerich Raabe
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


Benutzeravatar von NickLH
NickLH

Verwenden fflush(FILE *stream) mit stdout als Parameter.

http://www.elook.org/programming/c/fflush.html

  • Dadurch wird die Pufferung nicht deaktiviert, sondern der Puffer wird einmal geleert.

    – David Cleland

    8. Oktober 2020 um 14:23 Uhr

Benutzeravatar von Mickael Ciocca
Michael Ciocca

Du kannst das:

write(1, ".", 1);

an Stelle von:

printf(".");

Benutzeravatar von tdenniston
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

1401500cookie-checkSo deaktivieren Sie die Pufferung von stdout in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy