Linux和Windows c ++上的低级文件操作处理

时间:2014-01-31 19:24:23

标签: c++ linux windows file

虽然有类似的问题,例如herehere,但我对其他案例有疑问。

通过使用C / C ++,我想将一些字节写入文件。最初文件有数据。简单地说,我更新了文件的内容:我打开,写入和关闭。但是,如果它在写入期间失败并且如果我们无法处理故障(例如,应用程序崩溃,中断,电力关闭等),那么下面列表中的输出文件中保证了什么?哪种情况可能发生,哪些情况不可以?

  1. 文件可能为空(已删除现有值,无法编写新值)
  2. 文件保持锁定
  3. 文件可能包含旧值和新值(即前5行为新值,后5行为旧值)
  4. 文件可能包含旧值。
  5. 我不指望的其他任何东西?
  6. 如果你能给我独立于操作系统的方法,我会很高兴

    由于

1 个答案:

答案 0 :(得分:3)

将新数据写入具有相同名称但扩展名为“tmp”的文件。刷新并关闭tmp文件。删除原始文件。将tmp文件重命名为原始文件名。

启动时,扫描文件夹中的所有文件。删除名称部分与现有“源”文件匹配的所有tmp文件(即系统在tmp文件写入期间被中断)。重命名名称部分与现有源文件不匹配的任何tmp文件(写入tmp文件,原始文件已删除,但系统在重命名之前被中断)。

此系统取决于删除原始文件的原子性。如果成功,则获取新数据,如果失败,则获取旧数据。你永远不应该得到每个部分。