NOMBRE¶
mktemp - compone un nombre único (no repetido) de fichero temporal
SINOPSIS¶
#include <stdlib.h>
char *mktemp(char *template);
DESCRIPCIÓN¶
La función
mktemp() genera un nombre de fichero temporal único
a partir de
template. Los últimos seis caracteres de
template deben ser XXXXXX y éstos son reemplazados con una cadena
que hace que el nombre no esté repetido. Ya que será modificada,
template no debe ser una cadena constante sino que debería
declararse como un array de caracteres.
VALOR DEVUELTO¶
La función
mktemp() devuelve NULL en caso de error (
template
no terminaba en XXXXXX) y
template en otro caso. Si la llamada tuvo
éxito, los últimos seis bytes de
template habrán sido
modificados de tal manera que el nombre resultante es único (no existe
ya). Si la llamada fracasó,
template se convierte en una cadena
vacía.
ERRORES¶
- EINVAL
- Los últimos seis caracteres de template no eran
XXXXXX.
BSD 4.3. POSIX indica/recomienda/obliga
tmpnam(3).
NOTA¶
El prototipo se encuentra en
<unistd.h> para libc4, libc5 y glibc1;
glibc2 sigue `the Single Unix Specification' y tiene el prototipo en
<stdlib.h>.
FALLOS¶
Nunca use
mktemp(). Algunas implementaciones siguen a BSD 4.3 y
reemplazan XXXXXX por el identificador del proceso actual y una única
letra, por lo que, como mucho, se pueden devolver 26 nombres diferentes. Ya
que, por un lado, los nombres son fáciles de adivinar y, por otro lado,
existe una condición de carrera entre la comprobación de si el
nombre existe y la apertura del fichero, cualquier uso de
mktemp() es
un riesgo para la seguridad. La condición de carrera es evitada por
mkstemp(3).
VÉASE TAMBIÉN¶
mkstemp(3),
tempnam(3),
tmpfile(3),
tmpnam(3)