我目前正处于一个项目中,需要处理将大量字节写入文件的问题。我使用低级C函数write(int, const void *, size_t)
。为了一次处理大量字节,我将数据拆分为系统给出的块大小的块:
struct stat b_stat;
stat("/", &b_stat);
blksize_t block_size = b_stat.st_blksize;
项目管理重要数据,因此我必须检查每个错误。我的问题是,当我处于写入过程中并且一个块抛出错误时,我应该如何继续。先前的数据已写入文件,低级C函数不包含“撤消”功能。
你对我如何处理案件样本有什么想法吗?
答案 0 :(得分:3)
如果要“附加”到文件中(每个新块在前一个块之后结束),则可以在最后一个正确的块之后截断文件,以防出现错误。
如果使用新数据覆盖旧数据,则唯一的选择是使用临时文件进行写入,如果成功,则使用旧数据将文件重命名为某个临时名称(以备份),使用新数据重命名该文件到“正确”的名称,如果所有这些都成功,则删除旧数据的备份。