Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Fonction tmpfile

Entête à inclure

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

Fonction tmpfile

FILE * tmpfile();

La fonction tmpfile ouvre un fichier binaire temporaire. Ce fichier temporaire est ouvert en mode "rb+" : il est donc accessible en lecture et en écriture, ce qui vous permettra d'y stocker vos données temporaires. Le nom du fichier est garanti unique afin de ne pas écraser un fichier déjà existant.

Un fichier ouvert via la fonction tmpfile est automatiquement supprimé lors de sa fermeture (via un appel à la fonction fclose) ou lorsque le processus l'ayant acquis se termine normalement. En cas de terminaison anormale de votre processus la suppression (ou non) du fichier temporaire sera dépendante du système d'exploitation utilisé.

un processus C en cours d'exécution est limité quant au nombre de fichiers temporaires qu'il peut ouvrir simultanément. Le nombre maximal de fichier temporaire pouvant être ouvert par votre processus est défini par la macro TMP_MAX. Cette limite est aussi partagée par la fonction tmpnam. Plus plus un processus C est aussi limité sur le nombre de fichiers total qu'il peut ouvrir (temporaires ou non) : cette autre limite peut être connue via la macro FOPEN_MAX.

Paramètres

La fonction tmpfile n'accepte aucun paramètre.

Valeur de retour

Si la création du fichier se passe bien, un pointeur de type FILE * vous est retourné : vous pourrez utiliser ce pointeur pour vos actions de lectures/écritures sur votre fichier.

Si la création du fichier échoue, un pointeur NULL sera retourné et la variable globale errno contiendra le code d'erreur.

Codes d'erreurs pouvant être retournés

les codes erreurs proposés ci-dessous ne sont pas définis dans C ISO, mais dans le standard POSIX (Portable Operating System Interface uniX).

EACCES (POSIX) : un problème de sécurité d'accès au fichier a été constaté.

EEXIST (POSIX) : impossible de créer un nom de fichier unique.

EINTR (POSIX) : l'appel a été interrompu par un signal.

EMFILE (Error Max FILE - POSIX) : le nombre maximal de fichiers pouvant être ouvert par le processus est atteint.

ENFILE (POSIX) : le nombre maximal de fichiers pouvant être ouvert par le système d'exploitation est atteint.

ENOSPC (Error NO SPaCe - POSIX) : le répertoire est saturé et il n'est plus possible d'y ajouter un nouveau fichier.

EROFS (Error Read Only File System - POSIX) : le système de fichiers est en lecture seule.

Exemple de code

Voici un exemple de code qui stocke des données dans un fichier temporaire et les relis ultérieurement. A la fin du programme, le fichier temporaire est, bien entendu, automatiquement libéré.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {

    // On prépare des données à stocker dans le fichier temporaire
    char * tempData = strdup( "data-x\0" );
    int length = strlen( tempData );

    // On ouvre un fichier temporaire
    FILE * tempFile = tmpfile();

    // On sauvegarde des blocs de données dans le fichier temporaire.
    for( int i=0x30; i<0x3a; i++ ) {
        tempData[length-1] = i;
        fwrite( tempData, length, 1, tempFile );
    }
    memset( tempData, 0, length );

    // TODO: on image un traitement de données
    puts( "Un traitement quelconque" );

    // On relit les données initialement stockées dans le fichier
    fseek( tempFile, 0, SEEK_SET );
    for( int i=0; i<10; i++ ) {
        fread( tempData, length, 1, tempFile );
        puts( tempData );
    }

    // On libère la zone de mémoire instanciée par strdup
    free( tempData );

    // Le fichier temporaire est maintenant libéré
    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction tmpfile

Et voici les résultats affichés par ce programme.

Un traitement quelconque
data-0
data-1
data-2
data-3
data-4
data-5
data-6
data-7
data-8
data-9

Conformité

C89 / C99 / C11 / C18

Sujets connexes

Structure FILE *

Fonction fclose
Fonction fopen
Fonction fread
Fonction fseek
Fonction fwrite