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).