![我应该使用多少个“X”来使用“mktemp”安全且可移植地创建临时文件?](https://linux22.com/image/227748/%E6%88%91%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8%E5%A4%9A%E5%B0%91%E4%B8%AA%E2%80%9CX%E2%80%9D%E6%9D%A5%E4%BD%BF%E7%94%A8%E2%80%9Cmktemp%E2%80%9D%E5%AE%89%E5%85%A8%E4%B8%94%E5%8F%AF%E7%A7%BB%E6%A4%8D%E5%9C%B0%E5%88%9B%E5%BB%BA%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%EF%BC%9F.png)
答案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。