2009-06-03 170 views
3

我需要生成随机名称,我将使用它来在目录中创建临时文件。目前我正在使用C标准函数tempnam()。我的代码是用C++编写的,并且希望使用C++等价物来完成相同的任务。该代码需要在Solaris和Windows上工作。C++中的tempnam等效

有人知道C++中的这种东西吗?任何指针在此将不胜感激。

回答

4

尝试在cstdiostd::tempnam。 )

C标准库仍然在C++代码可用。为了方便起见,他们提供了C++包装器(头文件为'c'前缀,并且没有扩展名),并且可以在std名称空间中使用。

您也可以使用普通的C版(stdio.h中和的tempnam在全局命名空间,但你没有问C++版本;))

C++标准库只提供了新的功能,而实际上有空间改进。它有一个字符串类,因为字符串类是对C指针的改进,而不是字符指针。它有一个矢量类,因为它很有用。

对于像tempnam,将用C++来什么能够把党的话,我们没有已经由C有哪些?所以他们没有做任何事情,除了使旧版本可用。

+1

务必小心,以分清哪些是`std`的,哪些不是。假设如果函数在中,则在`std`名称空间中包含相同的函数是不安全的。这只适用于标准附录C.2中的功能,其标准中有209项标准。当包含时,可能会在中看到其他任何内容,但是没有任何内容保证它位于`std`命名空间中。 – 2009-06-03 13:18:52

1

为什么不直接使用你当前在C中使用的相同函数? C++是落后与C

1

兼容有什么不对的tempnam()?你可以使用正则的libc函数吗? tempnam在stdio.h中,你可能已经包含了它。

0
#include <cstdio> 
using std::tmpnam; 
using std::tmpfile; 

您也应该检查这个previous question on StackOverflow,并避免使用mkstemp创建文件竞争条件,所以我会建议使用的std :: TMPFILE

3

我知道这并不能回答你的问题,但作为一个侧注意,根据手册页:

的tempnam虽然(3)产生难以猜测的名字 ,它是 仍然可能是 时间之间的的tempnam(3)返回 路径名和 程序打开它的时间,另一个程序 可能使用 open(2)创建该路径名,或将其创建为符号 链接。这可能导致安全漏洞。为了避免这种可能性, 使用open(2)O_EXCL标志打开 的路径名。 或更好的是,使用 mkstemp(3)或tmpfile(3)