TMPNAM(3)

NOM
tmpnam, tmpnam_r - Créer un nom de fichier temporaire

SYNOPSIS
#include <stdio.h>

char *tmpnam(char *s);

DESCRIPTION
Note: évitez d'utiliser tmpnam(). Utilisez mkstemp(3) ou tmpfile(3) à la place. La fonction tmpnam() renvoie un pointeur sur une chaîne qui représente un nom de fichier valide, qui n'existait pas quelques instants auparavant. Ainsi, un programmeur naïf peut croire qu'il s'agit d'un nom correct pour créer un fichier temporaire. Si l'argument s est NULL, ce nom est stocké dans un tampon interne qui pourra être écrasé lors du prochain appel à tmpnam(). Si s est non NULL, le nom y est copié (le tampon doit faire au moins L_tmpnam octets) et la valeur de s est renvoyée si la fonction réussit.

Le nom de fichier qui est créé est préfixé par P_tmpdir. Les constantes L_tmpnam et P_tmpdir sont définies dans <stdio.h> comme TMP_MAX mentionné plus bas.

VALEUR RENVOYÉE
La fonction tmpnam() renvoie un pointeur sur un nom de fichier temporaire unique, ou NULL si l'unicité n'a pas pu être assurée.

ERREURS
Aucune erreur n'est définie.

ATTRIBUTS

  Multithreading (voir pthreads(7))
La fonction tmpnam() est sûre dans un contexte multithread avec exceptions. Elle n’est pas sûre dans un contexte multithread si appelées avec un paramètre NULL.

La fonction tmpnam_r() est sûre dans un contexte multithread.

CONFORMITÉ
SVr4, BSD 4.3, C89, C99, POSIX.1-2001. POSIX.1-2008 marque tmpnam() comme étant obsolète.

NOTES
La fonction tmpnam() engendre une nouvelle chaîne à chaque appel, jusqu'à TMP_MAX fois. Si on l'invoque plus de TMP_MAX fois, le comportement dépend de l'implémentation.

Bien que tmpnam() génère des noms difficiles à deviner, il est néanmoins possible qu'entre le moment où tmpnam() a renvoyé un nom de fichier, et le moment où le programme crée effectivement ce fichier, un autre programme ait déjà créé ce fichier avec open(2) ou comme un lien symbolique. Ceci peut occasionner des failles de sécurité. Pour éviter ces problèmes, utilisez l'option O_EXCL d'open(2) lors de l'ouverture du fichier. Ou mieux encore, utilisez mkstemp(3) ou tmpfile(3).

Les applications portables qui utilisent les threads ne peuvent pas appeler tmpnam() avec un paramètre NULL si _POSIX_THREADS ou _POSIX_THREAD_SAFE_FUNCTIONS sont définies.

Un brouillon POSIX proposait l'utilisation d'une fonction tmpnam_r() définie par

char *
tmpnam_r(char *s)
{
    return s ? tmpnam(s) : NULL;
}

apparemment comme une précaution pour ne pas utiliser NULL. Quelques systèmes l'implémentent. Pour obtenir le prototype de la glibc, définissez _SVID_SOURCE ou _BSD_SOURCE (avant d'inclure tout fichier d'en-tête).

BOGUES
N'utilisez jamais cette routine. Utilisez mkstemp(3) ou tmpfile(3) à la place.

VOIR AUSSI
mkstemp(3), mktemp(3), tempnam(3), tmpfile(3)

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».