原子写入文件中的多个位置吗?

时间:2020-02-29 16:54:57

标签: c linux file

我有一个C语言数据库,需要对其进行原子更新。具体来说,就是这样存储的文件

header: MAX_USERS/8 bytes
users: MAX_USERS*sizeof(USER) bytes

该文件为truncated,因为它确实稀疏且容量很大。

打开数据库时,我将整个标头读入内存,但没有一个用户。

在创建用户请求时,我想这样做:

// modify header in memory
// initialize user
// atomically: write header and user to disk

我可以找到的与此文件I / O相关的唯一标志是O_SYNC和O_DSYNC,但它们与我想要的相反,从而强制fwrite调用是原子的。我真正想要的是这样的东西:

// somehow, make file only write to disk when fflush is called
// write header to disk (fseek/fwrite)
// write user to disk (fseek/fwrite)
// if both of those succeeded: fflush/fsync

我想知道是否可以通过setvbuf_IOFBF之类的文件为文件显式提供用户空间缓冲区来实现,但是我不知道这样做是否可行。

0 个答案:

没有答案
相关问题