在C中处理对文件的块状写入

时间:2014-11-08 13:13:39

标签: c file block large-data

我目前正处于一个项目中,需要处理将大量字节写入文件的问题。我使用低级C函数write(int, const void *, size_t)。为了一次处理大量字节,我将数据拆分为系统给出的块大小的块:

struct stat b_stat;
stat("/", &b_stat);
blksize_t block_size = b_stat.st_blksize;

项目管理重要数据,因此我必须检查每个错误。我的问题是,当我处于写入过程中并且一个块抛出错误时,我应该如何继续。先前的数据已写入文件,低级C函数不包含“撤消”功能。

你对我如何处理案件样本有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果要“附加”到文件中(每个新块在前一个块之后结束),则可以在最后一个正确的块之后截断文件,以防出现错误。

如果使用新数据覆盖旧数据,则唯一的选择是使用临时文件进行写入,如果成功,则使用旧数据将文件重命名为某个临时名称(以备份),使用新数据重命名该文件到“正确”的名称,如果所有这些都成功,则删除旧数据的备份。