如何在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()。