Atomi c пишет в несколько мест в файле? - PullRequest
1 голос
/ 29 февраля 2020

У меня есть база данных в C, для которой мне нужно сделать атоми c обновления. В частности, это файл, который хранится следующим образом:

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

Файл усечен , потому что он действительно разреженный и имеет большую емкость.

Когда база данных открыта, я прочитать весь заголовок в память, но ни один из пользователей.

Когда приходит запрос на создание пользователя, я хотел бы сделать это:

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

Единственные флаги, которые я можно найти для файлового ввода / вывода, относящегося к этому, O_SYN C и O_DSYN C, но они делают то, что мне нужно, и fwrite вызывает атомы c. Что мне действительно нужно, так это:

// 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, но я не знаю, сработает ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...