代码之家  ›  专栏  ›  技术社区  ›  tvorog

如何在linux上实现写事务?全写还是不写

  •  -1
  • tvorog  · 技术社区  · 6 年前

    我要写信 bytes1 file1 bytes2 file2 为了确保我不会抓到 no space left 写作过程中出现异常。

    或者有人知道sql数据库如何实现文件的完整性?

    1 回复  |  直到 6 年前
        1
  •  0
  •   tvorog    6 年前

    我已经找到了实现事务的方法,但不知道这种方法的陷阱。关键是 truncate 允许我们实现回滚逻辑的系统调用。这是一个伪代码:

    file1Pos = file1.tell()
    file2Pos = file2.tell()
    
    err = file1.write(bytes1)
    if err != nil {
        // rollback to previous position
        file1.truncate(file1Pos)
        // The file offset is not changed after truncation
        file1.seek(file1Pos, SEEK_SET)
    }
    
    err = file2.write(bytes2)
    if err != nil {
        file1.truncate(file1Pos)
        file1.seek(file1Pos, SEEK_SET)
    
        file2.truncate(file2Pos)
        file2.seek(file2Pos, SEEK_SET)
    }