Articulo de referencia

mkstemp

En informática , mkstemp es 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 ...

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 de mkstemp.

Semántica

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. 1 2 3 4 mkstemp por OpenGroup
  2. "tempnam" . Especificaciones básicas de Open Group (edición 7  ). OpenGroup . 2018.
  3. 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 )
  4. 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 )
  5. 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.
  6. 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 .
  7. 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 .  
Obtenido de " https://en.wikipedia.org/w/index.php?title=Mkstemp&oldid=1329491511 "