例如:想把一些数据写入到文件中。
普通文件IO:
open()访问文件 -> 得到一个文件描述符fd -> 直接往文件描述符fd写入数据就可以了 -> 关闭文件描述符fd。
内存映射:
open()访问文件 -> 得到一个文件描述符fd -> 根据文件描述符fd去内存空间上映射一块空间,得到一个地址p -> 用户只需要将数据拷贝到内存空间上就可以了 -> 对应的文件就会有相应的变化 -> 撤销映射 -> 关闭文件描述符fd。
使用内存映射刷图片的优点:相对普通文件IO虽然代码步骤增加了,但是刷图的速度会更快。
3.内存映射相关函数
- 内存映射函数 mmap的用法
man 2 mmap
头文件:
#include <sys/mman.h>
函数原型:
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
返回值类型:void *
返回值:
成功:返回指向映射空间首地址的指针
失败:MAP_FAILED
形参一:
addr:映射空间首地址,一般设置NULL,让系统决定
形参二:
length:设置映射空间的大小 在这里我们是800 * 480 * 4字节
形参三:
prot:映射空间权限
PROT_READ 可读