gpt4 book ai didi

c++ - tmpnam 的 C/C++ 线程安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:30 27 4
gpt4 key购买 nike

我需要在 C++ 中使用 tmpnam 函数,但我需要了解它的线程安全性。也就是说,如果我有多个线程,每个线程都需要为一个临时文件获取不同的名称,我能保证每个线程都会收到一个不同名称的文件吗?

最佳答案

tmpnam 仅保证该文件当时不存在 - 但它可能在您自己创建之前创建。为了安全地使用它,您将始终需要尝试创建打开的文件(文件名,O_CREAT | O_EXCL | O_NOFOLLOW)。如果由于 EEXIST 或 ELOOP 而失败,请返回并尝试一个新名称。

这对于防止符号链接(symbolic link)攻击特别重要,在这种攻击中,另一个程序会创建一个从您的临时文件名到/etc/passwd 或其他重要文件的符号链接(symbolic link)。

此外,请确保您没有将 NULL 传递给 tmpnam,因为所有线程使用的缓冲区都是相同的。

另一种结合这些方法的方法是使用 mkstemp() 或 mkostemp(),它们将为您安全地创建文件。

最后,如果您不需要文件名,可以使用 tmpfile(),它将创建一个临时文件,该文件将在关闭时删除。

关于c++ - tmpnam 的 C/C++ 线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1145048/

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