如何获得在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都不为调用者提供名称,它们分别返回文件描述符或者文件句柄。