2008-10-01 30 views

Respuesta

17

Utilice una de las funciones estándar de biblioteca "mktemp": mktemp/mkstemp/mkstemps/mkdtemp.

Editar: plain mktemp puede ser inseguro - se prefiere mkstemp. función

+2

devuelven un identificador de ARCHIVO ya abierto, que no se combina con las transmisiones IO de C++. ¿Qué sucede si necesita, por ejemplo, usar std :: wofstream para escribir en este nuevo archivo? – Andrey

-2

Simplemente debe verificar si el archivo que está tratando de escribir ya existe. Este es un problema de bloqueo. Los archivos también tienen propietarios, por lo que si lo hace bien, el proceso incorrecto no podrá escribir en él.

0

hombre tmpfile

El tmpfile() abre un archivo temporal único en binario de lectura/escritura (w + b) de modo. El archivo se borrará automáticamente cuando se cierra o el programa de terminates.ote

6

tmpnam(), o cualquier cosa que le da un nombre va a ser vulnerables a las condiciones de carrera. Utilizar algo diseñado para este propósito que devuelve un identificador, tal como tmpfile():

#include <stdio.h> 

    FILE *tmpfile(void); 
0

mktemp debería funcionar o bien conseguir uno de la gran cantidad de bibliotecas disponibles para generar un UUID.

0

La función tmpnam() en la biblioteca estándar C está diseñada para resolver este problema. También hay tmpfile(), que devuelve un manejador de archivo abierto (y lo elimina automáticamente cuando lo cierra).

+0

No use tmpnam(). Desde la página del manual: "Nunca use esta función. Use mkstemp (3) o tmpfile (3)". – twk

+0

Vaya. No estaba prestando atención a la parte de la pregunta "en Linux". mkstemp() es probablemente la solución correcta, si no necesita portabilidad. –

Cuestiones relacionadas