Digamos que estoy creando un programa en C que necesita usar un archivo de temp. Crear un archivo de temp. Ad hoc en/tmp probablemente no sea una buena idea. ¿Hay una función o una llamada al sistema operativo que me proporcione un nombre de archivo temporal para que pueda comenzar a escribir y leer desde él?¿Cómo se obtiene el nombre de archivo de un archivo temporal para usar en Linux?
Respuesta
Puede usar la función mkstemp(3)
para este fin. Otra alternativa es la función tmpfile(3)
. Cuál de ellos elija depende de si desea que el archivo se abra como una secuencia de archivo de biblioteca C (que tmpfile
), o un descriptor de archivo directo (mkstemp
). La función tmpfile
también elimina el archivo automáticamente cuando finaliza el programa.
La ventaja de usar estas funciones es que evitan las condiciones de carrera entre la determinación del nombre de archivo único y la creación del archivo, de modo que dos programas no intentarán crear el mismo archivo al mismo tiempo, por ejemplo.
Consulte las páginas de manual para ambas funciones para obtener más detalles.
Absolutamente: man mkstemp.
La página man tiene un uso de ejemplo.
No estoy seguro acerca de nada en una lib de C, pero puede hacerlo en el shell con mktemp.
@garethm:
Creo que la función que está buscando se llama tmpnam.
definitivamente debe no uso tmpnam
. Sufre del problema de condición de carrera que mencioné en mi respuesta: entre determinar el nombre y abrirlo, otro programa puede crear el archivo o un enlace simbólico a él, que es un gran agujero de seguridad.
La página de manual de tmpnam
dice específicamente que no se use, pero para usar mkstemp
o tmpfile
en su lugar.
La pregunta es cómo generar un archivo temporal nombre. Ni mkstemp ni tmpfile proporcionan un nombre a la persona que llama, devuelven un descriptor de archivo o manejador de archivo, respectivamente.
Tiene razón, marca, la pregunta pide un nombre de archivo temporal. Pero la pregunta es incorrecta. El interlocutor no quiere realmente un nombre de archivo temporal, realmente quiere un archivo temporal. –
Entonces la pregunta debería ser cambiada. –
No es cierto: mkstemp * does * proporciona a la persona que llama un nombre, ya que modifica la plantilla que se le da. La persona que llama debe proporcionar una plantilla, pero esta es una cuestión relativamente simple de elegir un directorio temporal (por ejemplo, $ TMPDIR, P_tmpdir o "/ tmp") y un prefijo, seguido de seis X. –
Se debe utilizar la mkstemp() ya que esta es la función recomendada, pero devuelve un descriptor de archivo, por lo que una vez que tenga el descriptor de obtener su nombre:
int fd;
fd = mkstemp("hdrXXXXXX);
/* Read out the link to our file descriptor. */
sprintf(path, "/proc/self/fd/%d", fd);
memset(result, 0, sizeof(result));
readlink(path, result, sizeof(result)-1);
/* Print the result. */
printf("%s\n", result);
Chekc this [URL] (http://stackoverflow.com/help) Será útil aumentar la calidad de su contenido –
- 1. ¿Cómo obtener un nombre de archivo temporal?
- 2. nodejs - Nombre de archivo temporal
- 3. ¿Cómo creo un nombre de archivo temporal en Erlang?
- 4. ¿Cómo crear un archivo temporal en Java sin el número aleatorio agregado al nombre de archivo?
- 5. ¿Cómo se obtiene el tamaño de un archivo en MATLAB?
- 6. ¿Cómo puedo crear un archivo temporal para escribir en C++ en una plataforma Linux?
- 7. Flex: ¿obtiene el nombre del archivo SWF?
- 8. Cómo combinar archivos ordenados sin usar un archivo temporal?
- 9. error de hormiga No se puede cambiar el nombre del archivo anterior al archivo temporal
- 10. Guardar un archivo temporal
- 11. Obtiene el nombre de archivo actual en JSP
- 12. Descarga de archivo OpenXML sin archivo temporal
- 13. ¿Cómo se crea un archivo temporal con cacao? Hace
- 14. ¿Cómo obtener el ícono para una extensión de archivo o tipo de archivo sin crear un archivo temporal?
- 15. ¿Cómo crear un std :: ofstream en un archivo temporal?
- 16. ¿Obtiene el nombre del archivo en ejecución en Java?
- 17. ¿Cómo crear un archivo temporal (para escribir en) en C#?
- 18. ¿Cómo se obtiene el icono, el tipo MIME y la aplicación asociada a un archivo en el escritorio de Linux?
- 19. ¿Se puede crear el archivo temporal de flymake en el directorio temporal del sistema?
- 20. Regex para validar un nombre de archivo
- 21. ¿Cómo puedo usar la función splice() de Linux para copiar un archivo a otro archivo?
- 22. Cómo crear un directorio temporal y recibe el nombre de ruta/archivo en Python
- 23. ¿Es posible usar "/" en un nombre de archivo?
- 24. ¿Obtiene un objeto de archivo o URI para un archivo dentro de un archivo con Java?
- 25. cómo usar un archivo MS-Access de Linux?
- 26. ¿Cómo crear un archivo de texto temporal en C++?
- 27. Error de extracción de Git: no se puede crear el nombre de archivo sha1 temporal
- 28. Cómo crear un archivo temporal (0x100) para acelerar la aplicación
- 29. Cómo se obtiene el nombre del dispositivo de un iPhone
- 30. Obtener ruta de archivo y URL para el archivo en el directorio temporal
mkstemp sólo devuelve un descriptor de archivo abierto en una nuevo archivo pero también puede obtener su nombre final porque mkstemp reemplaza los caracteres XXXXXX de la plantilla. – Angel