gpt4 book ai didi

c - 创建临时目录的可靠方法

转载 作者:行者123 更新时间:2023-11-30 19:02:42 32 4
gpt4 key购买 nike

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

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

并且可以用 NULL 来调用它到独特的道路。问题是链接器警告我如下:

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

也如 this answer 中所建议的那样使用该功能。但是这个硬编码/tmp一开始看起来很奇怪。还要检查环境变量 TMP , TMPDIR等看起来很复杂。

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

最佳答案

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

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

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

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

关于c - 创建临时目录的可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539542/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com