我有一组要在我的存储设备中写入的数据页。我想通过使用顺序写策略来编写这N个页面。
请假设页面是连续的(其RNN值存储在一个名为 pages 的有序数组中,容量等于 npages - 这些页面的内容被序列化在 buf 数组中)。但是,我的主要疑问是如何在C中完成。
哪种形式最正确?
请注意我正在使用DIRECT I / O.
第一种形式 - >执行N次连续写入
void disk_write(char *file, int *pages, uint8_t *buf, int npages) {
int f;
int real_size;
int i;
if ((f = open(file, O_CREAT | O_RDWR | O_DIRECT, S_IRUSR | S_IWUSR)) < 0) {
//error
}
if (lseek(f, pages[0] * page_size, SEEK_SET) < 0) {
//error
}
for(i = 0; i < npages; i++) {
if ((real_size = write(f, buf + i * page_size, page_size)) != page_size) {
//(ERROR, "Sizes do not match in raw_write -> %d - %d", page_size, real_size);
}
}
close(f);
}
第二种形式 - &gt;执行大写作为唯一(批处理)操作
void disk_write(char *file, int *pages, uint8_t *buf, int npages) {
int f;
int real_size;
int i;
if ((f = open(file, O_CREAT | O_RDWR | O_DIRECT, S_IRUSR | S_IWUSR)) < 0) {
//error
}
if (lseek(f, pages[0] * page_size, SEEK_SET) < 0) {
//error
}
if ((real_size = write(f, buf, page_size * npages)) != page_size * npages) {
//(ERROR, "Sizes do not match in raw_write -> %d - %d", page_size * npages, real_size);
}
close(f);
}