PMDK libpmemblk 例程1 读写持久化内存块

本文介绍了PMDK库中的libpmemblk,它允许直接访问DAX存储并支持load/store访问,无需分页。文章详细讲解了libpmemblk的关键API,如创建、打开、读写内存块以及关闭等功能,并提供了一个示例,通过示例展示了如何使用这些API。在示例中,通过计算发现pmemblk_create在创建内存块时会占用额外字节,强调需通过pmemblk_nblock获取实际的block数量。此外,还提到每个block的大小并不等于预期的element数量,需要注意数据存储的细节。
摘要由CSDN通过智能技术生成

使用libpmemblk能直接访问storage(DAX),支持 load/store access,不需要 paging blocks。
libpmemblk API说明:http://pmem.io/pmdk/manpages/linux/master/libpmemblk/libpmemblk.7.html

Key:
pmemblk_create()  // 创建pmem的内存块
pmemblk_open()  // 打开已创建的内存块
pmemblk_nblock()  // 获得某内存块内分片元素数量
pmemblk_write()  // 将数据写入某分片元素
pmemblk_read()  // 从某分片元素中读出数据
pmemblk_set_zero()  // 将某分片元素设置成0
pmemblk_close()  // 关闭内存块
pmemblk_set_funcs()  // 允许用户覆盖libpmemblk内的malloc、free等函数,实现自定义malloc、free等
例子:

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

#include <libpmemblk.h>

#define POOL_SIZE ((size_t)(1024 * 1024 * 1024))  /* size of the pmemblk pool -- 1 GB */
#define ELEMENT_SIZE 1024  /* size of each element in the pmem pool */

int main(int argc, char *argv[])
{
    const char path[] = "/root/hostnme/pmemblk.002";
    char buf[ELEMENT_SIZE];
    char rcv[ELEMENT_SIZE];

    /* create the pmemblk pool or open it if it already exists */
    PMEMblkpool *pbp = pmemblk_create(path, ELEMENT_SIZE, POOL_SIZE, 0666);

    if (pbp == NULL)
        pbp = pmemblk_open(path, ELEMENT_SIZE);

    if (pbp == NULL) {
        perror(path);
        exit(1);
    }

    /* how many elements fit into the file? */
    size_t nelements = pmemblk_nblock(pbp);
    printf("file holds %zu elements\n", nelements);

    /* store a block at index 5 */
    strcpy(buf, "hello, world");
    printf("buf: %s\n", buf);
    if (pmemblk_write(pbp, buf, 0) < 0 ||
        pmemblk_write(pbp, buf, 5) < 0 ||
        pmemblk_write(pbp, buf, 6) < 0) {
        perror("pmemblk_write");
        exit(1);
    }

    /* read the block at index 5 */
    if (pmemblk_read(pbp, rcv, 5) < 0) {
        perror("pmemblk_read");
        exit(1);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值