On Tue, 2006-10-03 at 17:38 +0200, Edgar Bonet wrote:
> Le mardi 3 octobre, Patrick Dupre a écrit :
> > Je fais un fopen (fichier), comment est-ce que je peux faire pourque
> > fichier soit la standard output ?
>
> Déjà il ne faut pas faire de fopen. ;-)
>
> /* Open output file. */
> int fd = open(filename, flags, mode);
>
> /* Redirect file descriptor 1 (stdout). */
> dup2(fd, 1);
>
> /* We won't use fd anymore. */
> close(fd);
Gni ?
Déjà un fopen() est mieux qu'un open(), parcequ'il bufferise donc évite
de faire trop d'appels systèmes (un bon appel système est un appel
système qui a été évité).
Ensuite, ton code est un poil compliqué. On peut le remplacer par:
/* recopie la sortie standard */
int fd = dup(1);
... et si on veut utiliser un FILE* là-dessus pour être plus efficace:
/* associe un FILE* */
fdopen(fd, "w");
Xav
PS: après vérif, /dev/stdout existe aussi sur Solaris.