如何在linux上实现写事务?要么全写,要么什么都不做

如何在linux上实现写事务?要么全写,要么什么都不做,linux,transactions,diskspace,Linux,Transactions,Diskspace,我需要将bytes1写入file1和bytes2写入file2,并确保在写入过程中不会捕获没有剩余空间的异常 或者可能有人知道sql数据库如何实现其文件的完整性?我找到了一种实现事务的方法,但不知道这种方法的缺陷。关键元素是syscall,它允许我们实现回滚逻辑。下面是一个伪代码: file1Pos = file1.tell() file2Pos = file2.tell() err = file1.write(bytes1) if err != nil { // rollback t

我需要将
bytes1
写入
file1
bytes2
写入
file2
,并确保在写入过程中不会捕获
没有剩余空间的异常


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

我找到了一种实现事务的方法,但不知道这种方法的缺陷。关键元素是syscall,它允许我们实现回滚逻辑。下面是一个伪代码:

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)
}
据了解,如果文件是用
O_DIRECT
打开的,那么linux上的单次写入是原子的。如果您搜索“原子写入”,可能会有更多的发展。

这称为“原子写入”