En informática , mkstempes una función POSIX para crear un archivo temporal (un archivo informático que normalmente deja de existir cuando el programa que lo abrió lo cierra o finaliza). [ 1 ] Acepta un argumento que determina la ubicación del archivo temporal y el prefijo de su nombre de archivo generado. [ 1 ] Después de mkstempque se añadiera a la Especificación UNIX Única , la función tmpnam()quedó obsoleta, [ 1 ] porque esta última conllevaba el riesgo de que otro hilo o proceso pudiera crear un archivo temporal con el mismo nombre dentro del tiempo transcurrido desde que el llamador obtiene el nombre del archivo temporal e intenta crearlo. [ 2 ]mkstemp no sufre este problema. [ 3 ]
Uso
Inclusión
En C , esto se incluye mediante <stdlib.h>(o <cstdlib>en C++ , si no está disponible) según IEEE Std 1003.1, 2004, de lo contrario se incluye a través de en sistemas heredados.importstd;<unistd.h>
En C++, se puede reemplazar con std::tmpnam()o std::filesystem::temp_directory_path().
Firma
int mkstemp ( char * plantilla );Tenga en cuenta que templatees una palabra clave en C++, para plantillas .
- El parámetro
templatedebe ser una matriz de caracteres modificable y terminada en nulo. - El contenido
templatedebe tener el formato de una ruta de archivo válida , con seis 'X' al final. - El parámetro
templateno debe haber sido utilizado en una invocación anterior demkstemp.
Semántica
- Las ' X ' finales
templatese sobrescriben para generar un nombre de archivo único para el archivo temporal resultante. - La función informa un descriptor de archivo válido a un archivo temporal si tiene éxito; si falla, informa
-1.
Ejemplo
El siguiente código es un ejemplo del uso de mkstemp; la variable local filenamees modificada por mkstempy contendrá la ruta al nuevo archivo: [ 4 ]
#include <stdlib.h>void example () { char filename [] = "/tmp/prefXXXXXX" ; int fd = mkstemp ( filename ); }Condiciones de error
No se especifica si mkstempse establece errno , ni qué valores de errno se establecen, en caso de fallo. [ 1 ]
Mecanismo
La mkstempfunción genera un nombre de archivo según el argumento proporcionado para la plantilla e intenta crearlo. Repite este proceso hasta que se haya creado un archivo correctamente. [ 5 ] Después de esto, abre el archivo y devuelve el descriptor de archivo al llamador, [ 6 ] con el búfer de datos que se pasó a la función con la plantilla ahora conteniendo el nuevo nombre de archivo. [ 7 ] El archivo se puede eliminar inmediatamente después de que la mkstempllamada regresa para evitar que otros procesos lo abran, pero el archivo aún se puede usar porque el proceso que lo llamó todavía tendrá un descriptor de archivo válido. [ 5 ] Las versiones anteriores de mkstempcreaban el archivo con un umask de 0666, lo que resultaba en que los archivos temporales fueran legibles y escribibles para todos los usuarios y, por lo tanto, presentaban una vulnerabilidad de seguridad; esto se mitiga estableciendo el umask manualmente antes de llamar a mkstemp. [ 6 ] Las versiones más recientes de la función crean el archivo con el umask 600, de modo que solo el propietario del archivo puede leer y escribir en él. [ 7 ]
Véase también
Referencias
- 1 2 3 4 mkstemp por OpenGroup
- ↑ "tempnam" . Especificaciones básicas de Open Group (edición 7 ). OpenGroup . 2018.
- ↑ Stevens, W. Richard ; Rago, Stephen A. (2013). "Funciones de la biblioteca estándar". Archivos temporales . Addison-Wesley . pág. 169. ISBN 9780321638007.
{{cite book}}:|work=ignorado ( ayuda ) - ↑ Seacord, Robert C. (25 de abril de 2014). "Caracteres y cadenas (STR)". STR30-C. No intente modificar literales de cadena (2.ª ed.). Addison-Wesley. pág. 203. ISBN 9780133805291.
{{cite book}}:|work=ignorado ( ayuda ) - 1 2 Viega, John ; Messier, Matt (2003). "Archivos temporales en Unix". Secure Programming Cookbook for C and C++ . O'Reilly Media . pág. 66. ISBN 9780596003944.
- 1 2 Chen, Hao; Dean, Drew; Wagner, David A. (2004). "Verificación de modelos de un millón de líneas de código C" ( PDF) . Simposio sobre seguridad de redes y sistemas distribuidos . 4. Internet Society . Archivado (PDF) del original el 8 de octubre de 2015. Recuperado el 18 de mayo de 2019 .
- 1 2 Drepper, Ulrich (2009-04-08). "Programación defensiva para Red Hat Enterprise Linux (y qué hacer si algo sale mal)" (PDF) . pág. 7. S2CID 239879. Archivado del original (PDF) el 2019-03-05 . Recuperado el 2019-05-18 .
- Software relacionado con el sistema de archivos Unix
- Biblioteca C POSIX