我需要生成随机名称,我将用它来在目录中创建临时文件。目前我正在使用C标准函数tempnam()。我的代码是用C ++编写的,并且希望使用C ++等效来执行相同的任务。代码需要在Solaris和Windows上运行。
是否有人在C ++中意识到这样的事情?任何关于此的指针都将受到高度赞赏。
答案 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