【发布时间】:2016-07-14 16:18:32
【问题描述】:
我想生成一个具有“好”名称的临时文件,例如
my-app-Mar27-120357-Qf3K0a.html
同时遵循security 的最佳做法。
POSIX 为我提供了 mkstemp(3),它采用文件名模板(通常类似于 /tmp/my-app-XXXXXX),但它有两个问题:
- 我需要自己选择输出目录。 When I see glibc
tempnam(3)(which is deprecated for a security reason) considers many factors,我想让库函数选择它。 - 文件名中没有扩展名
第二个项目可以通过mkstemps(3) 来处理,它需要多个字符作为用户定义的扩展名。就我而言,我可以通过 my-app-Mar27-120357-XXXXXX.html 和 5
但它有自己的问题:
- 我还是要选择输出目录
- 它不是完全便携的。 NetBSD 似乎缺少它。
所以我正在考虑使用已弃用的tempnam(3) 生成带有输出目录路径的文件名,用X 覆盖文件名部分并将其提供给mkstemp(3),然后将文件重命名为我的首选格式.所以问题出在最后一步,重命名而不覆盖;在 POSIX 中可以吗?
或者有没有更好的选择?
【问题讨论】:
-
Alex 的回答也是我推荐的,但是如果你真的想要一个名字,你可以使用一个标准的 C 函数
tmpnam。 -
@JoachimPileborg
tmpnam(3)不如我在帖子中提到的tempnam(3)灵活。 -
NetBSD 7.0 和更新的有
mkstemps。但是它目前不存在于 Minix3 libc 中。 -
@kdhp 我显然检查了“DEFAULT (NetBSD-6.1.5)”。也许它默认是一个保守的选择。
标签: c file posix rename temporary-files