在Linux和Windows C 上处理的低级文件操作

Low Level File Operations Handling on Linux and Windows c++

本文关键字:文件 操作 处理 Linux Windows      更新时间:2023-10-16

事件,尽管有类似的问题,但我对另一种情况有一个问题。

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

  1. 文件可能为空(已删除现有值,无法编写新值)
  2. 文件停留
  3. 文件可能包含旧值和新值(即前5行是新值,最后5行是旧值)
  4. 文件可能包含旧值。
  5. 其他我不期望的其他东西?

如果您可以给我独立的操作系统方法,我会很高兴

谢谢

将新数据写入具有相同名称的文件,但带有'tmp'扩展名。冲洗并关闭TMP文件。删除原始文件。将TMP文件重命名为原始文件名。

在启动时,扫描文件夹中的所有文件。删除所有名称零件匹配现有"源"文件的TMP文件(即在TMP文件写入期间中断系统)。重命名任何名称零件与现有源文件不匹配的TMP文件(编写了TMP文件,删除了原始文件,但在重命名之前中断了系统)。

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