en dehors du programme, utilisez « T »:
# echo foo | tee foo.txt
foo
# cat foo.txt
foo
En fait, vous pourriez popen() un canal à un tee-shirt qui écrit le fichier, bien que ce système lourd. Quelque chose à cet effet:
FILE *stream_to_write_to = popen("tee filename.txt");
fprintf(stream_to_write_to, "goes to filename.txt and stdout\n");
Je suis curieux de voir s'il y a un moyen rapide de-C de le faire, parce qu'à un certain niveau, cela implique la copie de données. Il est facile d'écrire deux fichiers pour écrire au même endroit, utilisez dup() ou autre, mais le contraire est plus compliqué. Cela peut impliquer de pousser un module (l'exemple courant est "connld" sur un flux), bien que honnêtement, je n'ai jamais vu cela utilisé, donc j'aimerais voir un exemple de code de travail moi-même.
La meilleure référence que je puisse donner est «Programmation avancée dans l'environnement UNIX» de Stevens.
Mise à jour:
Pour parler au commentaire de R ci-dessous, la solution ci-dessus est un peu plus lourde version de juste fourchette/exec-ing et la réorientation de la poignée de l'enfant quelque part d'autre. Les deux vont résoudre le problème, bien que je préfère ce qui précède, car il est plus facile à nettoyer, mais honnêtement, les deux solutions sont assez lourdes. Fork() n'est pas une fonction légère. Si l'esprit de la question est de le faire sans fork/exec, alors je ne suis pas sûr, j'aimerais aussi savoir. Si fork/exec est correct, alors l'utiliser directement ou utiliser popen() le piratera.
Ceci est un repost de: http://stackoverflow.com/questions/418896/how-to-redirect-output-to-a-file-and-stdout – MasterHD
@MasterHD, vous avez raison. probablement je n'ai pas cherché assez à l'époque. – Framester