好的,mkstemp是在POSIX中创建临时文件的首选方法。
但是它打开文件并返回一个int,这是一个文件描述符。因此,我只能创建一个FILE*,而不能创建一个我喜欢在C++中使用的std::ofstream。(显然,在AIX和其他一些系统上,可以从文件描述符创建一个std::ofstream,但是当我尝试这样做时,我的编译器会报错。)
我知道我可以用tmpnam获得一个临时文件名,然后用它打开我自己的ofstream,但由于竞争条件,这显然是不安全的,并导致编译器警告(g++ v3.4。在Linux上):
warning: the use of `tmpnam' is dangero
使用C++,gcc.9x,Linux。我尝试打开和读取文件,然后让它保持打开状态以便进一步操作--每次迭代都要重写它。但是每次,在我open这个文件之后,它都会被清除。是否可以保留文件内容,直到我重写它?并且我想让文件一直处于打开状态,以便写入。 constructor()
{
{
ifstream tmp("file.db");
int date;
tmp >> date;
}
// it gets wiped out here, but I don't want it.
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b8bc26 in std::basic_filebuf<char, std::char_traits<char> >::_M_terminate_output() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) where
#0 0x00007ffff7b8bc26 in std::basic_filebuf<char, std::char_traits<char&
文件流析构函数可以抛出异常,例如,如果文件关闭操作失败?
auto f = new std::ofstream("data.txt");
f->exceptions(std::ofstream::failbit | std::ofstream::badbit);
...
delete f; // May throw?
是否可以通过手动关闭流来防止此类异常?
auto f = new std::ofstream("data.txt");
f->exceptions(std::ofstream::failbi