取消链接基础文件时,fstream 对象会发生什么情况?
What happens to fstream object when underlying file is unlinked?
我有以下代码打开一个流并写入它,然后删除它,再次尝试写入它。
有没有办法让 fstream 对象得到不存在文件的通知并重新创建文件(我知道我可以使用 stat 来检查但我想知道流对象本身是否有状态变化)
#include <iostream> // std::cout
#include <fstream> // std::fstream
#include <unistd.h>
#include <sys/stat.h>
int main () {
std::fstream fs;
fs.open ("test.txt",std::fstream::out);
if (fs.is_open())
{
fs << "lorem ipsum";
std::cout << "Operation successfully performed\n";
std::cout<<fs.fail()<<std::endl;
unlink("test.txt");
fs << "more lorem ipsum";
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
std::cout<<fs.fail()<<std::endl;
fs.close();
}
else
{
std::cout << "Error opening file";
}
return 0;
}
我试过了
is_open()
good()
没有。 I/O 继续到未链接的文件,当所有打开的 FD 都关闭时,该文件就会消失。
我有以下代码打开一个流并写入它,然后删除它,再次尝试写入它。 有没有办法让 fstream 对象得到不存在文件的通知并重新创建文件(我知道我可以使用 stat 来检查但我想知道流对象本身是否有状态变化)
#include <iostream> // std::cout
#include <fstream> // std::fstream
#include <unistd.h>
#include <sys/stat.h>
int main () {
std::fstream fs;
fs.open ("test.txt",std::fstream::out);
if (fs.is_open())
{
fs << "lorem ipsum";
std::cout << "Operation successfully performed\n";
std::cout<<fs.fail()<<std::endl;
unlink("test.txt");
fs << "more lorem ipsum";
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
fs.write("hi",2);
std::cout<<fs.fail()<<std::endl;
fs.close();
}
else
{
std::cout << "Error opening file";
}
return 0;
}
我试过了
is_open()
good()
没有。 I/O 继续到未链接的文件,当所有打开的 FD 都关闭时,该文件就会消失。