setbuf-Umleitung
Benutze ich setbuf, um die Umleitung von stdout zu char Puffer
Aber ich bekomme einige Nebenwirkung nach ,wenn ich was schreiben will, um den Standardausgabe-nur die neuen Daten
Wie im folgenden code:
#define bufSize 100
int main()
{
char buf[bufSize];
setbuf(stdout, buf);
printf("123"); //123 is written to the buffer
setbuf(stdout,NULL); //123 is written to the stdout(unwanted side effect)
printf("456"); //123456 appears in the stdout
}
Wie ich das problem lösen kann?
Andere Frage bezüglich dieser - wird dieser code funktioniert für unix/linux/mac os?
Kann jemand vorschlagen, die Lösung für die Umleitung?
Ich vermute, Sie haben der Puffer geleert bevor Sie es auf etwas anderes.
half ein wenig.Aber nicht das problem lösen - 456 gedruckt in den stdout ab 4 positition(ich meine, wo 123 beendet,die Verbleibende Lücke..)
Gibt es nicht eine Möglichkeit im standard C99-Umleitung an einen stream zu einem automatisch wachsenden Puffer. Es gibt einige Mechanismen, die für ähnliche Anforderungen, die in TR27431-2, aber Sie sind nicht überall verfügbar. Ich bin mir nicht sicher, dass Sie in der kommenden C-standard, entweder.
half ein wenig.Aber nicht das problem lösen - 456 gedruckt in den stdout ab 4 positition(ich meine, wo 123 beendet,die Verbleibende Lücke..)
Gibt es nicht eine Möglichkeit im standard C99-Umleitung an einen stream zu einem automatisch wachsenden Puffer. Es gibt einige Mechanismen, die für ähnliche Anforderungen, die in TR27431-2, aber Sie sind nicht überall verfügbar. Ich bin mir nicht sicher, dass Sie in der kommenden C-standard, entweder.
InformationsquelleAutor Yakov | 2011-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, können Sie umleiten
stdout
auf einen Puffer wie diesen. Es endet instdout
sowieso. Geben Sie nur ein Puffer, die verwendet werden, von Ihrem stream.Wenn Sie
setbuf(stdout, NULL)
, es wird ein neuer Puffer hinter die kulissen. Und es wird Ungepuffert schreiben.. d.h. kein Spülen erforderlich.Also es gibt keine Nebenwirkung hier, einfach normal Verhalten.
Wenn Sie umleiten möchten
stdout
Aussehen hier. Die ersten zwei Antworten beschreiben zwei Techniken, das zu tun.aktualisiert meine Lösung
InformationsquelleAutor duedl0r
Den
setbuf()
- Funktion nicht, leiten Sie die Ausgabe in den Puffer. Es zeigt nur, dass die standard-I/O-Bibliothek "verwenden Sie diesen Puffer nicht reservieren, man selbst".Sind Sie auch benutzen soll
setbuf()
einmal pro stream öffnen (sofort, nachdem er geöffnet und bevor irgendetwas anderes gemacht wird) und lassen Sie gut allein danach. Wenn Sie es verwenden, mehrmals, Sie erhalten in Undefiniertes Verhalten - und was Sie sehen, ist akzeptabel, weil die erforderliche Verhalten ist undefiniert.Den C99-standard sagt:
setbuf(stdout, NULL)
weisen einen Puffer selbst.Nein, es wird nicht. Es wird nicht-gepufferten Ausgang. Siehe das Zitat der standard, erwähnen
_IONBF
.Ja, Sie könnten Recht haben, es macht keinen Sinn. Ich Lesen Sie die folgenden von
man setbuf
: "Wenn das argumentbuf
NULL ist, wird nur der Modus betroffen ist; einen neuen Puffer, die wir aufgeteilt auf die nächste lese-oder Schreiboperation.", das verwirrt mich. Wenn Sie darüber nachdenken, mit _IONBF braucht keinen Puffer. Aber dann wieder, was hat den vorherigen Satz bedeutet? Vielleicht bedeutet es wird ein Puffer reserviert, aber geleert?InformationsquelleAutor Jonathan Leffler
setbuf
ist nicht für die Umleitung. Es ist weitgehend nutzlos, außer für ausschalten Pufferung, so dass alle Ausgabe erscheint sofort. Es kann auch verwendet werden, zu geben stdio einen anderen Puffer verwenden kann für dieFILE
, aber es ist nicht verpflichtet, Sie zu nutzen es in einer bestimmten Art und Weise, und da stdio verwendet normalerweise seinen eigenen Puffer, der eine gute Größe, ich kann nicht sehen, wie die Bereitstellung Ihrer eigenen Puffer sein könnte, sehr nützlich.Wenn Sie wollen umleiten der Ausgabe, sollten Sie wahrscheinlich eine neue Frage besser beschreiben genau das, was Effekte, die Sie wollen, zu erhalten.
InformationsquelleAutor R..