NOMBRE¶
mkstemp - crea un fichero temporal único (no repetido)
SINOPSIS¶
#include <stdlib.h>
int mkstemp(char *template);
DESCRIPCIÓN¶
La función mkstemp() 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. El fichero es entonces
creado en modo de lectura/escritura y los permisos 0666 (glibc 2.0.6 y
anteriores) o 0600 (glibc 2.0.7 y posteriores). Ya que será modificada,
template no debe ser una cadena constante sino que se debería
declarar como un array de caracteres. El fichero se abre con la opción
O_EXCL, garantizando que cuando mkstemp termine con éxito
seremos el único usuario.
VALOR DEVUELTO¶
La función mkstemp() devuelve el descriptor de fichero (fd) del
fichero temporal creado o -1 en caso de error.
ERRORES¶
- EINVAL
- Los últimos seis caracteres de template no eran XXXXXX. En
este caso template no se modifica.
- EEXIST
- No se pudo crear un nombre no repetido de fichero temporal. En este caso
el contenido de template es indefinido.
OBSERVACIONES¶
El comportamiento anterior (crear un fichero con el modo 0666) puede ser un
peligro para la seguridad, especialmente porque otras versiones de Unix usan
0600 y alguien podría pasar por alto este detalle al portar programas.
De manera más general, la especificación de POSIX no
dice nada sobre los modos de los ficheros, por lo que la aplicación
debería asegurarse de que su máscara umask tenga un
valor apropiado antes de llamar a mkstemp.
BSD 4.3, POSIX 1003.1-2001
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>.