答案1
可移植选项是六个或更多,因为这就是mkstemp(3)
所做的事情,这就是正在模拟的行为。然而,在某些系统上,指定超过 6 个会导致仅使用尾随的 6 个,而其余的则保留为X
。无论如何,如果内部使用 CSPRNG,六个应该足以防止攻击者 DoSing 该进程。
请注意,在某些系统(例如,带有 GNU 工具的 Linux)上,您可以完全删除模板,尽管这不可移植。大多数系统需要模板或前缀为 的文件-t
,如果您想要的文件不在 中$TMPDIR
,则需要模板。至少对于 FreeBSD 和 macOS 来说是这样。
您可能还会发现一些系统根本不支持mktemp(1)
,因为 POSIX 不要求它。然而,它被广泛使用,并且至少存在于 Linux、macOS、FreeBSD、NetBSD、OpenBSD、HP-UX 和 Solaris 上,因此您可以简单地告诉人们在任何缺少它的系统上安装 GNU coreutils。