Fonction fflush

Entête à inclure

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

Fonction fflush

int fflush( FILE * stream );

Certaines opérations d'écriture proposées par la librairie stdio.h utilisent des buffers en mémoire : les modifications ne sont pas forcément appliquées directement sur le fichier. La synchronisation du buffer en mémoire avec le fichier sera faites soit si le buffer en plein, soit si vous fermez le flux, soit si vous demandez explicitement une synchronisation. La fonction fflush permet de forcer explicitement cette synchronisation.

Paramètres

  • stream: ce paramètre permet d'indiquer le flux de caractères pour lequel le buffer en mémoire associé doit être synchronisé. 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

Si tout se passe bien, une valeur nulle vous sera retournée. Si une erreur empèche la synchronisation, alors la valeur EOF vous sera retournée. Consultez alors la variable errno pour obtenir plus d'informations sur la cause de l'erreur.

Codes erreurs pouvant être retournés

EBADF : le descripteur de flux (FILE *) passé en paramètre est invalide (certainement nul ou bien ouvert en lecture et non en modification).

...

Exemple de code

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

int main() {

    int returnCode;
    int count;
    int index;

    printf( "Contact count to insert: " );
    scanf( "%d", &count );

    FILE * stream = fopen( "Contacts.txt", "w" );
    if ( stream == NULL ) {
        fprintf( stderr, "Cannot open file for writing\n" );
        exit( -1 );
    }

    for( index=0; index<count; index++ ) {
        char bufferFirstName[30];
        char bufferLastName[30];

        printf( "Please enter a first name: " );
        scanf( "%s", bufferFirstName );

        printf( "Please enter a last name: " );
        scanf( "%s", bufferLastName );

        fprintf( stream, "| %-30s | %-30s | ... |\n",
                 bufferFirstName, bufferLastName );

        printf( "Contact inserted\n" );
        
        // Comment/uncomment the following lines and
        // display the file between each insertion.
        if ( fflush( stream ) ) {
            fprintf( stderr, "Cannot flush the stream\n" );
            break;
        }
    }

    returnCode = fclose( stream );
    if ( returnCode == EOF ) {
        fprintf( stderr, "Cannot close file\n" );
        exit( -1 );
    }
    
    return 0;
}

Sujets connexes