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