如何在Linux平台上创建用于用C ++编写的临时文件?

时间:2020-03-06 15:00:02  来源:igfitidea点击:

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

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

解决方案

我们只需检查要写入的文件是否已经存在。
这是一个锁定问题。
文件也具有所有者,因此如果操作正确,错误的过程将无法写入文件。

使用标准库" mktemp"功能之一:mktemp / mkstemp / mkstemps / mkdtemp。

编辑:普通的mktemp可以是不安全的mkstemp是首选。

man tmpfile

The tmpfile()  function  opens  a  unique  temporary  file  in  binary
         read/write (w+b) mode.  The file will be automatically deleted when  it
         is closed or the program terminates.ote

tmpnam()或者其他任何可以给我们起名字的东西都容易受到比赛条件的影响。使用为此目的而设计的可以返回句柄的东西,例如tmpfile():

#include <stdio.h>

   FILE *tmpfile(void);

mktemp应该可以工作,否则请从大量可用的库中生成一个以生成UUID。

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

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

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

长话短说,就像其他人提到的那样,仅应使用mkstemp()或者tmpfile()。