#include <stdio.h> // <cstdio> en C++
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é.
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
.
La fonction tmpfile
n'accepte aucun paramètre.
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.
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.
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; } |
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
C89 / C99 / C11 / C18
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 :