在C ++中的tempnam等价物

时间:2009-06-03 12:54:45

标签: c++ c

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

是否有人在C ++中意识到这样的事情?任何关于此的指针都将受到高度赞赏。

5 个答案:

答案 0 :(得分:4)

std::tempnam标题中尝试cstdio。 ;)

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

你也可以使用普通的C版本(全局命名空间中的stdio.h和tempnam,但你确实要求C ++版本;)

C ++标准库仅在实际存在改进空间时才提供新功能。它有一个字符串类,因为字符串类是C指针对char指针的改进。它有一个矢量类,因为它很有用。

对于像tempnam这样的东西,C ++能够为聚会带来什么,我们还没有来自C?所以他们没有采取任何措施,除了提供旧版本。

答案 1 :(得分:3)

我知道这不会回答你的问题,但作为旁注,根据手册页:

  

虽然tempnam(3)生成名称   这很难猜到   尽管如此,可能在...之间   tempnam(3)返回的时间   路径名,和时间   程序打开它,另一个程序   可能会使用创建该路径名   打开(2),或将其创建为符号   链接。这可以带来安全性   孔。为了避免这种可能性,   使用open(2)O_EXCL标志打开   路径名。 或者更好,使用   mkstemp(3)或tmpfile(3)

答案 2 :(得分:1)

为什么不使用您目前在C中使用的相同功能? C ++向后兼容C。

答案 3 :(得分:1)

tempnam()出了什么问题?你可以使用常规的libc函数吗? tempnam在stdio.h中,你可能已经包含了它。

答案 4 :(得分:0)

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

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