schreiben Sie (), um stdout und printf die Ausgabe nicht-interleaved?
#include <stdio.h>
#define MAXLEN 256
int main() {
int n;
char buf[MAXLEN];
while((n = read(0,buf,sizeof(buf))) != 0){
printf("n: %d:",n);
write(1,buf,n);
}
return 1;
}
Die Ausgabe des Programms (wo die erste read
und erste write
wird vom Benutzer eingegeben und hallte durch das terminal) ist:
read
read
write
write
n: 5:n: 6:
Die Ausgabe von printf () kommt nach dem drücken von Strg+D auf der standard-Eingabe und nicht zusammen mit der anschließenden liest. Warum geschieht dieses?
InformationsquelleAutor s_itbhu | 2009-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Printf gepuffert ist.
Können Sie erzwingen, printf zu "Spülen" Ihre Puffer mit dem fflush nennen:
Im Allgemeinen
printf()
gepuffert werden, ist eine gute Sache. Ungepufferte Ausgabe, besonders sichtbar Konsolen erfordern, dass der Bildschirm-updates und so, ist langsam. Langsam genug, dass eine Anwendung, die printf ' Ing eine Menge kann direkt verlangsamt, indem es (vor allem auf der Windows-Plattform; Linux-und UNIX-Versionen sind in der Regel weniger belastet).Jedoch
printf()
gepuffert werden, beißt Sie, wenn Sie auchfprintf(stderr,)
-stderr
ist bewusst Ungepuffert. Als Folge erhalten, können Sie Ihre Nachrichten mit einigenprintf()
fehlt; wenn Sie schreiben, um anderenFILE
Griff, auch verbunden mit dem terminal, und es könnte sein, Ungepuffert, stellen Sie sicher, dass Sie zuerst explizitfflush(stdout)
.Was bedeutet "
printf()
gepuffert" bedeuten?stackoverflow.com/a/17552608/242933
printf schreibt auf stdout und stdout ist gepuffert (standardmäßig). Es ist nur gespült z.B. auf line-feeds.
Sollte auch erwähnen, dass ein newline ('\n'), führen zu stdout geleert werden
InformationsquelleAutor Will
In der manpage für die Funktion fgets sagt mir:
Also die beste Lösung wäre, Sie nicht zu verwenden, schreiben und printf auf dem gleichen Deskriptor.
InformationsquelleAutor kmm
Printf ist die Verwendung von stdio und es ist gepuffert.
Schieben Sie es heraus, indem Sie einen Wechsel in "n: %d:\n"
\n ist nicht garantiert, Spülen Sie es.
stdout ist line buffered, es sei denn, es es richtet sich an ein nicht interaktives Gerät.
InformationsquelleAutor Tim Williscroft
Können Sie die std fflush () - Funktion das durchspülen der std-out-Puffer oder Sie können Gebrauch machen von einem zusätzlichen \n am Ende der Steuerelement-Zeichenfolge in der printf. So etwas
Es ist immer besser, um die write () - & read () - Funktionen in C anstelle von printf() und scanf(). Printf und scanf haben einige Probleme wie printf () speichert den string-parameter in stdout buffer. So dass ein manuelles Spülen erforderlich ist, der durchgeführt wird, durch fflush-Funktion oder mittels "\n". In einem kleinen Hallo Welt Programm zum drucken finden Sie nicht solch ein problem, wie die stdout-Puffer geleert wird am Ende der Programmausführung. Bessere Nutzung write (), die funktioniert einwandfrei. scanf habe auch das problem des Lesens Räume und eine Menge anderer Probleme in Bezug auf stdin-buffer.
Beispielsweise in den folgenden code:
Dem oben genannten Programm, da gab es das problem Lesen \n in stdin auf die EINGABETASTE drücken. Wir könnten dieses Problem beheben, aber nicht das leeren des stdin-Puffers oder die Nutzung von \n-Zeichen. Immer noch besser, verwenden Sie die read() und write () - Funktionen.
Hoffe, das hilft....
InformationsquelleAutor m4n1c
Verwenden fwrite (streams-version) eher als schreiben.
Beachten Sie, dass, während die zugeordnete Datei mit der Nummer 1, es ist nicht das gleiche.
InformationsquelleAutor