Comment changer stdout par programme

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.