小记——内存映射
来源:互联网 发布:物联网编程技术 编辑:程序博客网 时间:2024/05/21 07:08
1. 将文件映射到内存
#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;}
0 0
- 小记——内存映射
- 内存映射——原理
- 共享内存—内存映射mmap
- 共享内存—内存映射mmap
- linux 共享内存—内存映射mmap
- 共享内存—内存映射mmap
- 共享内存—内存映射mmap
- 进程间通讯——内存映射/文件映射形式
- Linux——内存映射文件mmap
- Win32汇编——内存映射文件
- Linux内存映射——mmap
- Linux内存映射——mmap(续)
- Linux内存映射——mmap
- 进程间通信——内存映射
- Linux内存映射——mmap
- Windows进程通信——内存映射
- .Net调试内存泄漏不断增长小记——SocketAsyncEventArgs
- 【转】经典!Linux设备驱动开发——内存映射
- 记录小白前端成长03
- “区块链”将重新定义人类生活,你会看懂么?
- leetcode 262. Trips and Users
- 运算符重载
- ""和null的区别
- 小记——内存映射
- hdu5722Jewelry
- strlen递归实现
- iOS9 HTTP 不能正常使用的解决办法
- 最近想开始学习机器学习
- map管理成员函数指针
- 读取文件方法大全
- zencart 本地环境使用ip访问无法登陆的问题
- Memcache[3]telnet操作Memcached