用于创建临时目录的任务/tmp
,
人们会如何选择mkdtemp
, mkstemp
等等,用于可移植代码?
我认为您需要在其他用户可能具有写入权限的目录中创建一个临时目录。
作为管理员,您应该进行设置,以便每个用户都有自己的TMPDIR
(例如与pam-tmpdir http://packages.ubuntu.com/libpam-tmpdir——或者更好的是每个进程的命名空间 http://glandium.org/blog/?p=217,但这需要更多设置)。然而,作为应用程序编写者,您不能假设这一点,因此您需要应对世界可写的情况/tmp
.
这里正确的函数是mkdtemp http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdtemp.html, since mkstemp http://pubs.opengroup.org/onlinepubs/009695399/functions/mkstemp.html只能创建常规文件。mkdtemp
仅在 POSIX.1 2008 中引入,因此原则上它可能无法在所有 POSIX 平台上使用。不过,它早已在各大平台上线:
- 自 OpenBSD 以来 (1997)
- 自从在 FreeBSD 上 (1998)
- 自从在 NetBSD 上 (1998)
- on OSX http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/mkdtemp.3.html从…10.0开始?
- 自 Glibc 2.2 (1999) 起在 Linux 上(使用 Glibc)
- 至少从 2001 年起就在 Dietlibc 中
- 我认为从 uClibc 成立以来
- in MINIX 3 http://www.minix3.org/manpages/html3/mkdtemp.html
- 仅在 Solaris 上索拉里斯10 http://docs.oracle.com/cd/E19082-01/819-2243/6n4i0997q/index.html
所以在实践中,你可以安全地使用mkdtemp
。如果您需要后备方案,请在源代码中包含 OpenBSD 实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)