警告:使用 `tmpnam' 是危险的,最好使用 `mkstemp'

warning: the use of `tmpnam' is dangerous, better use `mkstemp'

(注意:这是不是重复的问题)

我正在使用 libc 函数 tmpnam,并收到以下警告:

warning: the use of 'tmpnam' is dangerous, better use 'mkstemp'

我的问题不是“如何禁用警告”,而是“我应该改用什么功能”? mkstemp 没有帮助,因为我没有尝试创建临时文件 - 我正在创建临时 目录 。 AFAIK,没有 API 函数。

所以如果我不应该使用 tmpnam,我应该使用什么

您正在寻找 mkdtemp:

mkdtemp - create a unique temporary directory

例如,

#include <stdlib.h>
#include <string.h>
...
char templatebuf[80];
char *mkdirectory = mkdtemp(strcpy(templatebuf, "/tmp/mkprogXXXXXX"));

使用strcpy确保传递给mkdtemp的参数是可写的(c89),或者

#include <stdlib.h>
...
char templatebuf[] = "/tmp/mkprogXXXXXX";
char *mkdirectory = mkdtemp(templatebuf);

使用 c99。

由于该功能是 "new"(仅在过去十年内标准化,虽然在 1990 年代中期 Linux 上提供),您需要在头文件中打开该功能预处理器定义(可能因平台而异)。 Linux最简单的就是定义_GNU_SOURCE,例如

gcc -D_GNU_SOURCE -o foo foo.c