Re: Question C

Pàgina inicial

Reply to this message
Autor: Xavier Bestel
Data:  
A: Edgar Bonet
CC: Liste Guilde
Assumpte: Re: Question C
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.