#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <stdio.h>
#define MAP_LENGTH (500*1024*1024) // 10MB
int main()
{
int fd;
void * addr;
// 1. 创建一个 Hugetlb 文件系统的文件
fd1 = open("/dev/hugepages/hugepage1", O_CREAT|O_RDWR);
if (fd < 0) {
perror("open()");
return -1;
}
// 2. 把虚拟内存映射到 Hugetlb 文件系统的文件中
addr1 = mmap(0, MAP_LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
perror("mmap()");
close(fd);
unlink("/mnt/huge/hugepage1");
return -1;
}
memset(addr1, 0, MAP_LENGTH);
fd2 = open("/dev/hugepages/hugepage2", O_CREAT|O_RDWR);
if (fd2 < 0) {
perror("open()");
return -1;
}
// 2. 把虚拟内存映射到 Hugetlb 文件系统的文件中
addr2 = mmap(0, MAP_LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (addr2 == MAP_FAILED) {
perror("mmap()");
close(fd2);
unlink("/mnt/huge/hugepage2");
return -1;
}
memset(addr2, 0, MAP_LENGTH);
strcpy(addr, "This is HugePages example...");
printf("%s\n", addr);
sleep(100);
// 3. 使用完成后,解除映射关系
munmap(addr1, MAP_LENGTH);
munmap(addr2, MAP_LENGTH);
close(fd1);
close(fd2);
unlink("/dev/hugepages/hugepage1");
unlink("/dev/hugepages/hugepage2");
return 0;
}