linux - 如何在linux上实现写事务?全部写入或不执行任何操作

标签 linux transactions diskspace

我需要将 bytes1 写入 file1 并将 bytes2 写入 file2 并确保在写入过程中不会捕获 no space left 异常。

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

最佳答案

我找到了一种实现事务的方法,但不知道这种方法的陷阱。关键元素是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)
}

关于linux - 如何在linux上实现写事务?全部写入或不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51042622/

相关文章:

ios - 有没有办法确定应用程序在 iOS 中使用的磁盘空间量?

Linux - 在 CLI 中更改主机名

c - 什么是最好的,单线程或多线程服务器?

PHP PDO - 没有事件事务

kubernetes - kubernetes 中容器和 Pod 的磁盘空间分配

linux - vmware 为 linux 扩大空间

c++ - 无法读取使用相同代码在不同机器上写入的文件

c++ - 加载共享库的多个拷贝

java - Spring & JDBC 事务 : How to ensure isolation level SERIALIZABLE in a DAO object?

java - 如何将 Spring 事务传播到另一个线程?