我正在尝试打开一个文件进行重写。然后我关闭文件,重新打开它以进行读取以验证它是否正常。确实如此。但是,在我拔下设备(ARM)并再次插入后,我发现文件变空了。我也尝试手动复制文件(使用cp),同样的现象再次发生。 这是一些代码:
string fileName = "/home/root/LogiTrackV2/InitialSetup.xml";
ofstream theFile (fileName.c_str());
if (theFile.is_open())
{
theFile.close();
}
theFile.open(fileName.c_str(), ios::out | ios::trunc);
theFile << xmlOUT.c_str();
theFile.close();
正如我之后提到的,文件存在并按原样更新。问题是当我拔下电源插头时......
答案 0 :(得分:2)
问题比我在C ++中想象的要复杂得多。标准库中无法强制fsync
上的POSIX ofstream
调用。但是,您可以将Boost.Iostream与file_descriptor_sink
(http://www.boost.org/doc/libs/1_55_0/libs/iostreams/doc/classes/file_descriptor.html)一起使用,并在提供的fsync
上执行fd
,以强制Linux将文件写入磁盘。