Programme:
#include void main() { printf("Hello world\n"); }
Le programme ci-dessus imprime la sortie sous la forme “Hello world” dans stdout (Terminal). Mais, j’ai besoin de la sortie du programme dans un autre fichier comme “output.txt”. Ainsi, existe-t-il un moyen de modifier la sortie standard du processus en un autre fichier par programmation.
Vous n’avez pas besoin de toute cette entreprise en constante évolution. Tout ce que vous avez à faire est d’ouvrir un fichier et d’y écrire. Utilisez fopen
et fprintf
pour le faire.
Vous pourriez vouloir utiliser freopen (3) sur stdout
mais cela fermerait stdout
.
Vous pouvez utiliser dup2 (2) comme:
int newfd = open("/tmp/someoutput.txt", O_WRONLY|O_CREAT, 0640); if (newfd<0) { perror("/tmp/someoutput.txt"); exit(EXIT_FAILURE); }; if (dup2(STDOUT_FILENO, newfd)) { perror("dup2"); exit(EXIT_FAILURE); }
Mais comme commenté par David Heffernan, vous voulez vraiment utiliser les redirections dans votre shell.
IMHO redirect STDOUT_FILENO
comme ci-dessus sent mauvais .
Une manière possible pourrait être de déclarer un
FILE* myout = stdout;
et toujours utiliser fprintf(myout,
au lieu de printf(
et peut-être parfois faire myout = fopen("/tmp/someoutput.txt");
avec un test!
Informez au moins l'utilisateur que vous redirigez son stdout
(peut-être par un message vers stderr
etc ...)!
Vous pouvez utiliser fprintf
pour écrire un fichier .Ouvrez un fichier en w
ou en mode, puis utilisez fprintf
pour y écrire.