小记——内存映射
2016-07-18 18:03
106 查看
1. 将文件映射到内存
2. 获得页面大小
3. 解除映射
4. 调整映射内存的大小
5. 改变保护模式
6. 同步内存映射到文件
#include <sys/mman.h>
int msync (void *addr, size_t len, int flags);==>例程:
#include <sys/mman.h> void * mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset);
2. 获得页面大小
#include <unistd.h> long sysconf (int name); long page_size = sysconf (_SC_PAGESIZE); OR #include <unistd.h> int getpagesize (void);
3. 解除映射
#include <sys/mman.h> int munmap (void *addr, size_t len);
4. 调整映射内存的大小
#define _GNU_SOURCE #include <sys/mman.h> void * mremap (void *addr, size_t old_size, size_t new_size, unsigned long flags);
5. 改变保护模式
#include <sys/mman.h> int mprotect (const void *addr, size_t len, int prot);
6. 同步内存映射到文件
#include <sys/mman.h>
int msync (void *addr, size_t len, int flags);==>例程:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> int main (int argc, char *argv[]) { struct stat sb; off_t len; char *p; int fd; if (argc < 2) { fprintf (stderr, "usage: %s <file>\n", argv[0]); return 1; } fd = open (argv[1], O_RDONLY); if (fd == −1) { perror ("open"); return 1; } if (fstat (fd, &sb) == −1) { perror ("fstat"); return 1; } if (!S_ISREG (sb.st_mode)) { fprintf (stderr, "%s is not a file\n", argv[1]); return 1; } p = mmap (0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0); if (p == MAP_FAILED) { perror ("mmap"); return 1; } if (close (fd) == −1) { perror ("close"); return 1; } for (len = 0; len < sb.st_size; len++) putchar (p[len]); if (munmap (p, sb.st_size) == −1) { perror ("munmap"); return 1; } return 0; }
相关文章推荐
- spark操作mysql数据库
- “区块链”将重新定义人类生活,你会看懂么?
- netdevgirl.eclipse创建maven javaweb项目
- Postfix邮件服务器搭建及配置
- python命令行下tab键补全命令
- javascript面试题:如何把一句英文每个单词首字母大写?
- Debain安装字体,修改默认编码,命令行
- hadoop伪分布式2.4.1安装
- ""和null的区别
- leetcode 262. Trips and Users
- BottomSheetDialog
- nginx生产环境常用功能include 、虚拟主机别名、rewrite、nginx status详细解析、fastcgi、访问控制
- RedHat Linux 手动设置IP及传送文件到远程主机
- git 操作
- eclipse里面已经提交的svn提交
- .net {"已添加项。字典中的关键字:“**”所添加的关键字:“**”"}
- Android Studio的使用
- 判断距离自己最近的点
- jmeter分布式测试,控制机没有返回测试数据的原因
- 已经过事务处理的 MSMQ 绑定(转载)