4

对于在 中创建临时目录的任务,对于可移植代码/tmp,如何在 、 等之间进行选择mkdtempmkstemp

4

1 回答 1

13

我认为您需要在其他用户可能具有写权限的目录中创建一个临时目录。

作为管理员,您应该进行设置,以便每个用户都有自己的TMPDIR(例如使用pam-tmpdir — 或者使用每个进程命名空间更好,但这需要更多设置)。但是,作为应用程序编写者,您不能假设这一点,因此您需要处理一个全局可写的/tmp.

这里的正确函数是mkdtemp, 因为mkstemp只能创建常规文件。mkdtemp仅在 POSIX.1 2008 中引入,因此原则上它可能尚未在所有 POSIX 平台上可用。但是,它已经在各大平台上架了很长时间:

  • 从2.2 (1997)开始在 OpenBSD 上
  • 自2.2.7 (1998)以来在 FreeBSD 上
  • 从1.4 (1998)开始在 NetBSD 上
  • OSX上,因为... 10.0?
  • 自 Glibc 2.2 (1999) 起在 Linux(使用 Glibc)上
  • 至少从 2001 年开始在dietlibc
  • 从一开始就在uClibc中,我认为
  • MINIX 3
  • Solaris 10起仅在 Solaris 上

所以在实践中,你可以安全地使用mkdtemp. 如果您需要后备,请在您的源代码中包含 OpenBSD 实现。

于 2012-09-24T20:45:43.087 回答