Fonctions fputc, putc et putchar

Entête à inclure

#include <stdio.h>  // <cstdio> en C++

Fonctions fputc, putc et putchar

int fputc( int character, FILE * stream );
int putc( int character, FILE * stream );
int putchar( int character );

Ces fonctions permettent d'écrire un caractère sur le flux de caractères passé en paramètre (sauf dans le cas de putchar ou là stdout est imposé). Une fois le caractère écrit dans le flux, la position de la tête de lecture sera déplacé pour la prochaine écriture.

En fait fputc et putc sont identiques au détail près que sur certains compilateurs la fonction putc est implémentée sous forme d'une macro.

Paramètres

  • character: ce paramètre stocke le caractère à écrire dans le flux. Le fait que ce caractère soit typé comme un int (et non un pas char) trouve son origine dans l'utilisation de la fonction fgetc. Effectivement, celle-ci peut soit retourner un caractère (donc 256 possibilités différentes) soit un code d'erreur, qui se doit donc d'être un 257 état potentiel. En conséquence, le type de retour de la fonction fgetc est donc int. Le fait que fputc accepte un int permet donc la chose suivante : fputc( fgetc( sourceStream ), destStream );.
  • stream: ce paramètre permet d'indiquer le flux de caractères (ou d'octets) à utiliser pour l'écriture. N'oubliez pas que la valeur de ce paramètre à été initialement capturée lors de l'invocation de la fonction fopen.

Valeur de retour

En cas de succés, ces fonctions doivent renvoyer le caractère envoyé dans le flux. Par contre, en cas d'erreur, la valeur EOF sera retournée. Dans ce cas, il vous faudra alors consulter la variable errno pour obtenir de plus amples informations sur l'erreur constatée.

Codes erreurs pouvant être retournés

EAGAIN : le flux est vérrouillé et il faudra tenter ultérieurement l'écriture.

EBADF : le descripteur de flux (FILE *) passé en paramètre est invalide.

EIO : une erreur d'accès physique au flux vient d'être générée.

...

Exemple de code

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char * argv[] ) {

    int counter;
    FILE * outputFile;
    
    argc--;   argv++;
    
    if ( argc == 0 ) {
        printf( "Usage: sample filename\n" );
        exit( 0 );
    }
    
    outputFile = fopen( argv[0], "w" );
    if ( outputFile == NULL ) {
        printf( "Cannot open file %s\n", argv[0] );
        exit( -1 );
    }
    
    for ( counter='a'; counter<='z'; ++counter ) {
        fputc( counter, outputFile );
    }
    fputc( '\n', outputFile );
    for ( counter='A'; counter<='Z'; ++counter ) {
        fputc( counter, outputFile );
    }
    fputc( '\n', outputFile );
    
    fclose( outputFile );
        
    return 0;
}

Sujets connexes