Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155576
  • 博文数量: 56
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 502
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-18 14:21
文章分类

全部博文(56)

文章存档

2010年(39)

2009年(17)

我的朋友

分类: LINUX

2009-12-18 14:39:40

百度的一个博客文章--Linux的mmap文件内存映射机制

#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
 
int main(void)
{
        int *p;
        int *p2;//

        int fd = open("hello", O_CREAT|O_RDWR);
        if (fd < 0) {
                perror("open hello");
                exit(1);
        }
        p =(int*) mmap(NULL, 4100, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
        ftruncate(fd, 4100);
        if (p == MAP_FAILED) {
                perror("mmap1\n");
                exit(1);
        }
        ftruncate(fd, 5000);//改变文件大小

        p2 = (int*)mmap(NULL, 10, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 1024*4);//

        if(p2 == MAP_FAILED)
        {
          printf(strerror(errno));
          exit(1);
        }
        close(fd);//关闭了文件操作符也不会有影响
        p[0] = 0x121212;
        p[1024] = 0x343434;
        p2[0] = 0x454545;
        p2[1] = 0x787878;
        munmap(p, 6);
        munmap(p2,10);
        
        return 0;
}
 

映射的位置和大小必须在文件中存在,否则会出错;
不按页面对其映射会映射失败,错误显示为Invalid argument;
越界写对map映射读写,会出现段错误;
阅读(1762) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:UDP简单封装

给主人留下些什么吧!~~