C ändern printf () die Ausgabe in eine Datei
Gibt es eine Möglichkeit zum ändern der printf
um die Ausgabe auf eine Datei statt an die Konsole?
Ich habe versucht, auf der Suche bis etwas auf dem Internet und fand anrufen wie dup
, dup2
und fflush
, dass möglicherweise im Zusammenhang mit diesem.
EDIT:
Vielleicht war ich nicht klar.. die Sache ist die, dass dies in einer C-Prüfung Frage.. die Frage ist wie folgt:
Erklären, wie ein Programm, das normalerweise die Ausgabe von strings auf dem Bildschirm (mit printf()
) vorgenommen werden kann, um Ausgabe-string in eine Datei, ohne ändern von code in das erwähnte Programm.
- Wenn Sie erklären, warum Sie dies tun wollen, etwas bizarre an der Sache, die Antworten werden in der Regel besser.
- Wie wäre
fprintf
? Oder mit der shell-Umleitung (./myprogram > some_file
)? - danke für deine Antwort.. ich werde weiter Ausloten der shell-Umleitung-option ..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese erfolgt in der Regel mit I/O-redirection (... >Datei).
Überprüfen Sie dieses kleine Programm:
Wenn Sie nicht über die Freiheit, den Quellcode ändern, das macht Druck, die Sie verwenden können,
freopen
aufstdout
umleiten in eine Datei:Diese grenzt an einen hack, aber da die Kommando-Zeile leitet mehr arbeiten als erwartet. Wenn Sie nicht haben Zugriff auf den code, nicht den Druck, mit
fprintf
bevorzugt.Können Sie auch schalten Sie Ihr
stdout
vorübergehend für eine Funktion aufrufen, und dann legen Sie es zurück:freopen
Ihrestdout
, der Ausgang geht auf die Datei. Sie können nicht zurück nachfreopen
, aber Sie können speichern das alte stdout und steckte es zurück in die Richtung, in der ich erklärte zu Bearbeiten.Die anderen Antworten nicht mit dem problem fertig nicht zu ändern code.
So, abhängig von der Umgebung, das einzige, was Links ist, ist die Ausgabe auf stdout-Umleitung beim aufrufen der Programm.
Entweder
sprintf
schreiben in einen string dann in eine Datei, oderfprintf
direkt.http://linux.die.net/man/3/fprintf
snprintf
ist fast immer eine bessere Wahl alssprintf
zum vermeiden von buffer-overflows.Dozent konsultiert wurde und das war die richtige Lösung (von der Dozentin selbst):
Die Logik hinter dup2: hier stdout wird festgelegt, wie eine Kopie von newFile, was bedeutet, dass FD 0 ist jetzt eigentlich der Benutzer die gewünschte Datei und nicht die Konsole. Dies ist, weil das Standard-Verhalten von dup 2 schließen Sie den zweiten parameter der filedescriptors und ordnen Sie dem ersten parameter.