TMPNAM(3)

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

SYNOPSIS
#include <stdio.h>

char *tmpnam (char *s);

DESCRIPTION
La fonction tmpnam() renvoie un pointeur sur une chaîne qui représente un nom de fichier valide, qui n'existait pas il y a quelques instants. 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.

CONFORMITÉ
SVr4, BSD 4.3, C89, C99, POSIX.1-2001.

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 tempnam(3) génère des noms qui soient dificiles à deviner, il est néanmoins possible qu'entre le moment où tempnam(3) renvoie le nom du chemin et le moment où le programme l'ouvre, un autre programme a pu créer ce même nom de chemin avec open(2), ou l'avoir créer sous forme de lien symbolique. Cela peut conduire à des trous de sécurité. Pour éviter de telles possibilités, utilisez l'attribut O_EXCL de open(2) pour ouvrir le nom du chemin. Ou encore mieux, 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 glibc de cette fonction, définir _SVID_SOURCE ou _BSD_SOURCE avant d'inclure <stdio.h>.

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

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

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 2 décembre 1996 et révisée le 22 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 tmpnam ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.