创建临时目录的可靠方法

时间:2019-04-05 16:12:24

标签: c linux posix temporary-directory

我正在为一个需要编写目录以测试其应提供的功能的库编写测试。我做了一些研究,发现有一个库函数:

#include <stdio.h>
char *tmpnam(char *s);

可以用NULL来调用它到唯一路径。问题是链接器警告我如下:

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

也按照this answer中的建议使用该功能。但是开头的这种/tmp硬编码看起来很有趣。另外,检查环境变量TMPTMPDIR等看起来很复杂。

也许有一些POSIX函数可以为我检查这些变量?除了共享的静态缓冲区和竞争条件之外,使用tmpnam还有其他陷阱吗?

1 个答案:

答案 0 :(得分:1)

tmpnam()函数不会创建目录;它会生成一个文件名,该文件名在调用时某处不存在,但是在您尝试与创建目录的mkdir()一起使用时可能存在。通常有很多相关功能可以完成大致相同的工作,但是在每个平台上它们都是不同的。

POSIX确实提供了mkdtemp()mkstemp()-前者创建目录,后者创建文件;相同的页面同时记录了两者-您在其中指定函数的模板。这样,您就可以负责在其中创建目录或文件的目录。

对于mkstemp()mkdtemp(),包含新文件或目录的目录必须已经存在。

使用tmpnam()的主要问题之一是,您基本上无法控制文件的创建位置或文件名。几乎所有其他功能都会为您提供一些控制措施。通常,不是线程安全的不是主要问题-您可以提供一个将用于线程安全的缓冲区。