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 tmpnam

Entête à inclure

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

Fonction tmpnam

char * tmpnam( char * buffer );

La fonction tmpnam renvoie un pointeur vers une chaîne de caractères contenant un nom de fichier qui n'existe pas encore au moment de son appel. Ce nom pourra être utilisé pour créer un fichier temporaire.

rien ne garantit que le fichier soit encore disponible entre le moment de l'acquisition du nom du fichier temporaire et la tentative de création associée. Effectivement, un autre programme peut aussi utiliser ce nom de fichier durant ce laps de temps.
cette fonction ne crée pas de fichier temporaire. Elle se contente de produire un nom de fichier. Si vous l'utilisez, il sera de votre responsabilité de créer le fichier équivalent et ce le plus rapidement possible. Si vous souhaitez directement obtenir un fichier temporaire, préférez l'utilisation de la fonction tmpfile.

Cette fonction est prévue pour être invoquée TMP_MAX fois au sein d'un même processus. Au-delà, le comportement de la fonction dépendra du système d'exploitation considéré.

Si le paramètre buffer est NULL alors le nom du fichier sera placé dans un buffer interne. Celui-ci sera modifié lors du prochain appel à tmpnam. Cette utilisation de la fonction n'est donc pas thread-safe : en cas d'utilisation de cette fonction par plusieurs threads en simultané, des problèmes pourront survenir.

Si vous fournissez un buffer en paramètre et que tout se passe bien, le nom du fichier temporaire sera copié dans ce buffer et il sera retourné en sortie de fonction.

Paramètre

Valeur de retour

Si la fonction peut produire un nom de fichier unique, la fonction renvoie un pointeur non nul. Ce pointeur est de type char * et contient le nom pour votre fichier temporaire. Dans le cas contraire, le pointer NULL vous sera retourné.

Exemple de code

Voici un exemple de code d'utilisation de la fonction tmpnam.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
#include <stdio.h>
#include <stdlib.h>


int main() {

    for(int i=0; i<TMP_MAX; i++) {
        char buffer[L_tmpnam + 1];          // + 1, car chaîne AZT (A Zéro Terminal)
        char * result = tmpnam(buffer);
        printf("%s\n", result ? result : "Cannot produce unique filename");
    }
    
    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction tmpnam

Et voici les premiers résultats affichés par ce programme : les noms générés sur votre système d'exploitation seront certainement différents de l'exemple proposé.

$> gcc -o sample sample.c
$> ./sample
/tmp/filebUWoLr
/tmp/fileCGiypR
/tmp/filea20J16
/tmp/file6YhiKj
/tmp/fileDWFUmQ
/tmp/fileZHNgQj
/tmp/file24pKYK
/tmp/filemVYrcW
/tmp/fileDVuyH8
/tmp/fileHUz70d
$> 

Conformité

C89 / C99 / C11 / C18

Sujets connexes

Fonction fclose
Fonction fopen
Fonction tmpfile