Я сейчас в проекте, что должно обрабатывать запись большого количества байтов в файл. Я использую низкоуровневую функцию С write(int, const void *, size_t)
. Для того, чтобы обрабатывать много байт сразу, я разделить данные на блоки размера блока, который задается система:Обрабатывать запись по блоку в файл в C
struct stat b_stat;
stat("/", &b_stat);
blksize_t block_size = b_stat.st_blksize;
Проект управляет важными данными, так что я должен проверить для каждой ошибки. Моя проблема заключается в том, как я должен действовать, когда я нахожусь в середине процесса записи, и один блок вызывает ошибку. Предыдущие данные уже записаны в файл, а низкоуровневые C-функции не включают в себя что-то вроде функции «отменить».
Есть ли у вас какие-либо идеи о том, как я должен действовать в этом примере?
Вы, вероятно, не должны так беспокоиться. Диск ввода/вывода очень медленный w.r.t. ЦПУ. Вы не объясняете, какие данные вы обрабатываете и как организовывается файл, и на какой операционной системе и файловой системе. Если вы не пишете последовательно, вы рассмотрели [sqlite] (http://sqlite.org/) или [gdbm] (http://www.gnu.org.ua/software/gdbm/) или базы данных как [mongodb] (http://www.mongodb.org/) или [postgresql] (http://postgresql.org/)? –
Кстати, вы не должны «ставить» корневой каталог '/', но каталог, в котором находится файл, который вы пишете (или сам файл записи). Вероятно, они будут в разных файловых системах! –