如何获得在Linux中使用的临时文件的文件名?

时间:2020-03-05 18:43:41  来源:igfitidea点击:

假设我正在用C创建一个需要使用临时文件的程序。在/ tmp中创建临时的临时文件可能不是一个好主意。是否有一个函数或者OS调用来为我提供一个临时文件名,以便我可以开始对其进行写入和读取?

解决方案

回答

为此,我们可以使用mkstemp(3)函数。另一种选择是tmpfile(3)函数。
选择哪一个取决于我们是否要以C库文件流(" tmpfile"执行)或者直接文件描述符(" mkstemp")打开文件。编程完成后,tmpfile函数也会自动删除文件。

使用这些函数的优点是,它们避免了在确定唯一文件名和创建文件之间的争用情况-例如,两个程序不会尝试同时创建同一文件。

有关这两个功能的更多信息,请参见手册页。

回答

绝对:男人mkstemp。

手册页中有示例用法。

回答

不确定C库中的任何内容,但是我们可以使用mktemp在Shell上执行此操作。

回答

@garethm:

I believe that the function you're looking for is called tmpnam.

我们绝对不应该使用tmpnam。它遭受了我在回答中提到的竞争条件问题:在确定名称并将其打开之间,另一个程序可能会创建文件或者指向该文件的符号链接,这是一个巨大的安全漏洞。

" tmpnam"手册页专门说不要使用它,而要使用" mkstemp"或者" tmpfile"。

回答

问题是如何生成一个临时文件名。 mkstemp和tmpfile都不为调用者提供名称,它们分别返回文件描述符或者文件句柄。