创建临时目录的可靠方法[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

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

并且可以用NULL将其称为唯一路径。问题是链接器警告我如下:

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

另外在this answer中建议使用该功能。但是这个硬编码的/tmp在开始时看起来很惊人。另外检查环境变量TMPTMPDIR等看起来很复杂。

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

c linux posix temporary-directory
1个回答
1
投票

tmpnam()函数不会创建目录;它会生成一个文件名,该文件名在调用它的某个时间点不存在,但是当你尝试将它与mkdir()一起使用时,它可能存在,它确实创建了目录。通常有大量相关的功能来完成大致相同的工作,但它们在每个平台上都是不同的。

POSIX确实提供了mkdtemp()mkstemp() - 前者创建了一个目录,后者创建了一个文件;同一页面记录两者 - 您在其中指定模板的功能。这使您负责创建目录或文件的目录。

使用mkstemp()mkdtemp()时,包含新文件或目录的目录必须已存在。

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

© www.soinside.com 2019 - 2024. All rights reserved.