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