在C ++中,在Linux上,如何编写一个函数来返回一个临时文件名,然后我可以打开它进行编写?
文件名应尽可能唯一,以便使用相同功能的另一个进程不会得到相同的名称。
答案 0 :(得分:18)
使用标准库“mktemp”函数之一:mktemp / mkstemp / mkstemps / mkdtemp。
编辑:普通的mktemp可能不安全 - 首选mkstemp。
答案 1 :(得分:7)
tmpnam(),或任何给你一个名字的东西都会受到竞争条件的影响。使用为此目的设计的东西返回句柄,例如tmpfile():
#include <stdio.h>
FILE *tmpfile(void);
答案 2 :(得分:2)
GNU libc手册讨论了各种可用选项及其注意事项:
http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html
长话短说,只应使用mkstemp()或tmpfile(),正如其他人所提到的那样。
答案 3 :(得分:0)
man tmpfile
tmpfile()函数以二进制形式打开一个唯一的临时文件 读/写(w + b)模式。该文件将被自动删除 已关闭或程序终止。ote
答案 4 :(得分:0)
mktemp应该可以工作,或者获取大量可用库中的一个来生成UUID。
答案 5 :(得分:0)
C标准库中的tmpnam()函数旨在解决此问题。还有tmpfile(),它返回一个打开的文件句柄(并在你关闭它时自动将其删除)。
答案 6 :(得分:-2)
您只需检查您尝试写入的文件是否已存在。 这是一个锁定问题。 文件也有所有者,所以如果你做得对,错误的过程将无法写入。