#include <stdio.h> // <cstdio> en C++
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.
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.
L_tmpnam
octets
(cette constante étant définie dans l'entête <stdio.h>
).
Ce paramètre peut être NULL
et dans ce cas un buffer interne à la fonction sera utilisé.
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é.
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; } |
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 $>
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 :