如何在C中实现顺序写操作?

时间:2017-02-12 05:33:05

标签: c file io fwrite

我有一组要在我的存储设备中写入的数据页。我想通过使用顺序写策略来编写这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);
}

0 个答案:

没有答案