mktemp(3) 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.

CONFORME A

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