fprintf à la fois pour déposer et pour stdout

Mon programme C devrait produire beaucoup de résultats.

Certaines de ces lignes de sortie sont spéciales et je voudrais écrire une copie dans un fichier spécial. Je finis par faire

FILE * outf = fopen("special_file", "a"); fprintf(stdout, "normal line 1\n"); fprintf(stdout, "special line!\n"); fprintf(outf, "special line!\n");/*inelegant & dangerous code duplication*/ fprintf(stdout, "normal line 2\n"); 

Existe-t-il un moyen simple d’éviter une telle duplication de code inélégante et dangereuse? J’en ai pas mal et je pourrais éventuellement écrire des choses comme printf("next is %d\n", num++); cela ne peut pas être dupliqué naïvement, par exemple en utilisant des macros.

Pour le moment, je ne vois pas de solution à moins de générer un processus enfant qui exécutera un équivalent en tee . Une autre idée? Par exemple, peut-on définir un type de FILE* qui sera en quelque sorte redirigé vers stdout & outf ?

Je pense que l’appel système dup (2) est ce dont vous avez besoin, voir “man 2 dup”.

edit: merci pour les votes, mais je pense que je me suis trompé.

Dup fait faire deux descripteurs de fichier référencer un fichier. Ce que vous voulez, c’est un object unique semblable à un descripteur de fichier qui fait référence à deux fichiers. C’est une chose très différente.