C modification de printf () pour la sortie vers un fichier
Est-il un moyen de modifier la printf
afin de chaîne de sortie sur un fichier plutôt que sur la console?
J'ai essayé de regarder sur Internet et trouvé des appels comme dup
, dup2
et fflush
qui pourraient être liés à ce.
EDIT:
Peut-être que je n'étais pas clair.. le truc c'est que c'était dans une C à l'examen de la question.. la question est comme suit:
Expliquer comment un programme qui, normalement, chaînes de sortie à l'écran (à l'aide de printf()
) peut être fait à la sortie de chaîne de caractères dans un fichier, sans changement de code dans le programme.
Si vous l'expliquer pourquoi vous voulez faire cela un peu bizarre, les réponses seront généralement mieux.
Que diriez -
merci pour votre réponse.. je vais explorer davantage la coquille de l'option de redirection ..
Que diriez -
fprintf
? Ou de l'utilisation de la coquille de redirection (./myprogram > some_file
)?merci pour votre réponse.. je vais explorer davantage la coquille de l'option de redirection ..
OriginalL'auteur user1317277 | 2012-06-08
Vous devez vous connecter pour publier un commentaire.
Ceci est habituellement fait avec I/O-redirection (... >fichier).
Vérifier ce petit programme:
OriginalL'auteur ott--
Si vous n'avez pas la liberté de modifier le code source qui fait de l'impression, vous pouvez utiliser
freopen
surstdout
pour rediriger vers un fichier:Ce frontières sur un hack, cependant, parce que la ligne de commande redirige cessera de fonctionner comme prévu. Si vous avez accès au code qui n'a l'impression, à l'aide de
fprintf
est préféré.Vous pouvez également passer votre
stdout
temporairement pour un appel de fonction, puis de le remettre:aussi, comment faire printf impression à la console à nouveau ?
Oui, une fois que vous
freopen
votrestdout
, la sortie passe pour le fichier. Vous ne pouvez pas revenir en arrière aprèsfreopen
, mais vous pouvez stocker la vieille stdout et le mettre de la même manière que je l'ai expliqué dans l'édition.OriginalL'auteur dasblinkenlight
Les autres réponses ne viennent pas à bout du problème de ne pas modifier le code.
Donc, en fonction de l'environnement, la seule chose qui reste est la redirection de la sortie standard (stdout) lors de l'appel du programme.
OriginalL'auteur glglgl
Utiliser
sprintf
pour écrire une chaîne de caractères, puis à un fichier, oufprintf
directement.http://linux.die.net/man/3/fprintf
snprintf
est presque toujours un meilleur choix quesprintf
pour éviter les dépassements de tampon.Je suis d'accord. Voulais juste garder les choses simples.
OriginalL'auteur user1202136
Le chargé de cours a été consulté et c'était la bonne solution fourni (par l'enseignant lui-même):
La logique derrière dup2: ici, la sortie standard est défini comme une copie de newFile, ce qui signifie que FD 0 est maintenant de l'utilisateur fichier requis et non pas la console. C'est parce que le comportement par défaut de dup 2 est de fermer le deuxième paramètre est filedescriptor et de l'attribuer au premier paramètre.
OriginalL'auteur Mark B