我打算使用tmpnam()一个临时文件命名,该文件稍后将重命名,而不是删除。但是我找到了以下文档,现在我对其中所说的那部分很感兴趣
“ ...天真的程序员可能会认为它是临时文件的合适名称。”
从http://man7.org/linux/man-pages/man3/tmpnam.3.html
tmpnam()函数返回一个指向有效文件名的字符串的指针,这样,在某个时间点不存在具有该名称的文件,因此天真的程序员可能会认为它是临时文件的合适名称。如果参数s为NULL,则此名称在内部静态缓冲区中生成,并且可能在下次调用tmpnam()时被覆盖。如果s不为NULL,则将名称复制到s指向的字符数组(长度至少为L_tmpnam),并在成功的情况下返回值s。
有人可以解释为什么文档这么说吗?
我认为“它”是指生成的名称,只有天真的程序员会认为命名临时文件就足够了,否则为什么要提及它呢?如果这不是合适的解决方案,为什么会存在呢?
如果有人可以解决,我将不胜感激。
小智 3
另一个程序可能会同时创建一个具有完全相同名称的文件。为了确保您实际上可以获取具有该文件名的文件,文件名和文件本身的创建应该是一个原子的、不可分割的操作。
这有点理论化,因为 tmpnam() 和实际创建之间的时间可能非常短。但仍然有可能。