有没有理由避免使用tmpnam()来获取临时文件的名称?

时间:2014-01-22 23:07:21

标签: c++ c file-io

我打算使用tmpnam()命名一个临时文件,该文件稍后将被重命名,而不是删除。但是我找到了以下文档,现在我对这个部分感兴趣

“......天真的程序员可能会认为它是临时文件的合适名称。”

来自http://man7.org/linux/man-pages/man3/tmpnam.3.html

  

tmpnam()函数返回指向有效字符串的指针          文件名,并且某些文件中不存在具有此名称的文件          时间点,以便天真的程序员可能认为它是一个合适的名称          用于临时文件。如果参数s为NULL,则此名称为          在内部静态缓冲区中生成,可能被覆盖          下一次调用tmpnam()。如果s不为NULL,则将名称复制到          s和the指向的字符数组(长度至少为L_tmpnam)          如果成功,则返回值s。

有人可以解释为什么文档会这么说?

我认为“它”是指生成的名称,并且只有天真的程序员才会认为命名临时文件就足够了,否则为什么要提呢?如果它不是一个合适的解决方案,它为什么存在?

如果有人能清除它,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

在此期间,另一个程序可能会创建一个具有该名称的文件。为了确保您实际上可以获得具有该文件名的文件,文件名和文件本身的创建应该是原子的,不可分割的操作。

这有点理论上,因为tmpnam()和实际创建之间的时间可能非常短。但仍然有可能。