在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(),正如其他人所提到的那样。

man tmpfile

  

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

mktemp应该可以工作,或者获取大量可用库中的一个来生成UUID。

C标准库中的 tmpnam()功能是旨在解决这个问题。还有tmpfile(),它返回一个打开的文件句柄(并在你关闭它时自动将其删除)。

您只需检查您尝试写入的文件是否已存在。 这是一个锁定问题。 文件也有所有者,所以如果你做得对,错误的过程将无法写入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top