You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C17标准中tmpnam函数“现有文件”定义的技术问询

关于C17标准中tmpnam函数“现有文件”的范畴解释

tmpnam函数会生成一个有效的文件名,且该文件名与现有文件名不重复。该函数最多可生成至少TMP_MAX个不同的字符串,但其中任意或全部字符串可能已被现有文件占用,因此无法作为合适的返回值。

C17 7.21.4.4.2条款里的“现有文件”,指的是**tmpnam生成的文件名所指向的目标目录下,当前已存在的所有文件**,具体细节如下:

  • 目标目录默认是调用进程的当前工作目录(标准未强制其他目录,主流实现均采用当前工作目录)。
  • 这里的“现有”不局限于当前进程创建或打开的文件:无论哪个进程创建、是否处于打开状态,只要该目录下存在对应文件名的实体文件,就属于“现有文件”范畴。
  • 范围并非整个文件系统:仅针对目标目录内的文件,其他目录下的同名文件不会被纳入判断。

另外需要注意,标准仅保证调用tmpnam的瞬间,生成的名字在目标目录下无对应文件,但由于生成名字到创建文件之间存在时间窗口(可能被其他进程抢占创建同名文件),这也是tmpnam被认为不安全的核心原因之一。

内容的提问来源于stack exchange,提问作者BenevolentDeity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:40:56