(Nota: esta no es una pregunta duplicada)
Estoy usando la función libc tmpnam y recibo la siguiente advertencia:
warning: the use of 'tmpnam' is dangerous, better use 'mkstemp' Mi pregunta no es "cómo deshabilitar la advertencia", sino "¿qué función debo usar en su lugar"? mkstemp no ayuda, porque no estoy tratando de crear un archivo temporal, estoy creando un directorio temporal. Y AFAIK, no hay una función API para eso.
Entonces, si se supone que no debo usar tmpnam , ¿ qué se supone que debo usar?
Estás buscando mkdtemp :
mkdtemp - create a unique temporary directoryp.ej,
#include <stdlib.h> #include <string.h> ... char templatebuf[80]; char *mkdirectory = mkdtemp(strcpy(templatebuf, "/tmp/mkprogXXXXXX")); usando strcpy para asegurarse de que el parámetro pasado a mkdtemp se pueda escribir (c89), o
#include <stdlib.h> ... char templatebuf[] = "/tmp/mkprogXXXXXX"; char *mkdirectory = mkdtemp(templatebuf);con c99.
Dado que la función es "nueva" (solo estandarizada en los últimos diez años, aunque se proporcionó a mediados de la década de 1990 en Linux), debe activar la función en los archivos de encabezado con una definición de preprocesador (que puede diferir de una plataforma a otra). otro). Lo más simple para Linux es definir _GNU_SOURCE , por ejemplo,
gcc -D_GNU_SOURCE -o foo foo.c