11

在 C++ 中,在 Linux 上,我如何编写一个函数来返回一个临时文件名,然后我可以打开该文件名进行写入?

文件名应尽可能唯一,以便使用相同函数的另一个进程不会获得相同的名称。

4

7 回答 7

18

使用标准库“mktemp”函数之一:mktemp/mkstemp/mkstemps/mkdtemp。

编辑:普通 mktemp 可能不安全 - mkstemp 是首选。

于 2008-10-01T22:13:18.673 回答
7

tmpnam() 或任何给你一个名字的东西都容易受到竞争条件的影响。使用为此目的设计的返回句柄的东西,例如 tmpfile():

   #include <stdio.h>

   FILE *tmpfile(void);
于 2008-10-01T22:14:34.847 回答
2

GNU libc 手册讨论了可用的各种选项及其注意事项:

http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html

长话短说,正如其他人所提到的,应该只使用 mkstemp() 或 tmpfile() 。

于 2009-09-21T18:39:14.677 回答
0

人 tmpfile

tmpfile() 函数以二进制读/写 (w+b) 模式打开一个唯一的临时文件。该文件将在关闭或程序终止时自动删除。ote

于 2008-10-01T22:14:30.993 回答
0

mktemp 应该可以工作,否则可以使用大量可用库之一来生成 UUID。

于 2008-10-01T22:15:07.640 回答
0

C 标准库中的tmpnam()函数就是为了解决这个问题而设计的。还有 tmpfile(),它返回一个打开的文件句柄(并在您关闭它时自动删除它)。

于 2008-10-01T22:15:29.963 回答
-2

您应该简单地检查您尝试写入的文件是否已经存在。这是一个锁定问题。文件也有所有者,所以如果你做对了,错误的进程将无法写入它。

于 2008-10-01T22:09:09.573 回答