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

时间:2016-02-03 21:32:32

标签: linux api warnings libc

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

您正在寻找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。

由于该功能是&#34; new&#34; (仅在过去十年中标准化,尽管在20世纪90年代中期在Linux上提供),您需要使用预处理器定义(可能因平台而异)在头文件中打开该功能。最简单的Linux是定义_GNU_SOURCE,例如,

gcc -D_GNU_SOURCE -o foo foo.c