与mkstemp等价的c++标准库是什么?
libstdWhat is the C++ standard library equivalent for mkstemp?
我正在转换一个使用POSIX FILE
临时文件到c++标准库iostreams的程序。mkstemp的正确替代方案是什么?
无。请注意,mkstemp
既不是C(至少是C99)的一部分,也不是c++标准的一部分——它是POSIX添加的。c++的C库部分只有tmpfile
和tmpnam
。
提振。然而,IOStreams提供了一个file_descriptor
设备类,它可以用来创建一个基于mkstemp
返回的流。
如果我没记错的话,应该是这样的:
namespace io = boost::iostreams;
int fd = mkstemp("foo");
if (fd == -1) throw something;
io::file_descriptor device(fd);
io::stream<io::file_descriptor> stream(device);
stream << 42;
如果需要可移植的c++解决方案,应该在boost::filesystem:
中使用unique_pathunique_path函数生成一个适合创建的路径名临时文件,包括目录。这个名字是基于一个模型它使用百分号字符来指定由随机的十六进制数字。[注:更多的随机位在生成的路径名称,先前存在或正在存在的可能性较小猜到了。模型中每替换一个十六进制数字加4一些随机性。因此,默认模型提供64位的随机性。这对于大多数应用程序来说已经足够了
没有可移植的c++方法来做到这一点。您需要创建一个文件(这是在使用ofstream
打开文件进行写入时自动完成的),然后在完成文件时再次使用remove
(使用C库函数remove)。但是您可以使用tmpnam
为文件生成一个名称:
#include <fstream>
#include <cstdio>
char filename[L_tmpnam];
std::tmpnam(filename);
std::fstream file(filename);
...
std::remove(filename); //after closing, of course, either by destruction of file or by calling file.close()
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 根据 c++ 标准在该宏定义中推送/弹出宏时的行为是什么
- 标准库容器最简单、性能差的哈希类是什么?
- C++ 捕获异常后进行清理的标准方法是什么?
- 读取二进制文件的惯用C++17标准方法是什么
- 在 NTL 中构造多项式的标准方法是什么?
- C++标准兼容库容器的完整接口是什么?
- 此代码中的数组初始化样式是什么?这是标准的吗?
- Eclipse CDT 项目中的缺省C++标准是什么?
- "AfxIsValidAddress"函数的等效标准函数是什么?
- 在C++中编写符合 IEEE-754 标准的双/浮子除法的最快方法是什么?
- embarcadero/borland TMemoryStream和TFileStream的标准C++等价物是什么?
- 使用C 17处理Unicode的有效,符合标准的机制是什么
- C 11中的标准方法是什么,可以访问std :: vector中元素n的指针
- 模板函数作为模板参数,标准是什么
- 选择排序算法的标准是什么
- 编译器用来决定移动操作是否安全的标准是什么
- 参数传递中常量位置的 c++ 标准是什么?