首页 > 技术文章 > linux C学习笔记04--内存映射

mhl2018 2015-05-29 13:53 原文

内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善:

 

/*************************************************************************
    > File Name: memory_map.c
    > Author: hailin.ma
    > Mail: mhl2018@126.com 
    > Created Time: Thu 28 May 2015 08:20:50 AM CST
 ************************************************************************/

#include<stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>

#define MEM_MAP_SIZE 1000

int memory_map()
{
    char * pmap = NULL;
    int fd;
    char rdbuf[100] = "\0";

    fd = open("memory.txt",O_RDWR|O_CREAT|O_TRUNC,0660);

    if(fd == -1)
    {
        perror("open error");
        return -1;
    }

    write(fd,"hello world!",MEM_MAP_SIZE);        //write data to file,the write size must as long as MEM_MAP_SIZE
    
    pmap = mmap(NULL,MEM_MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);        //map memory with file

    printf("the memory is: %s\n",pmap);

    memset(pmap,'a',MEM_MAP_SIZE);
    memcpy(pmap,"this is memory map",18);        //try to chang any charactor in memory
    
    lseek(fd,0,SEEK_SET);            //move fd pointer to begin section
    
    memset(rdbuf,0,sizeof(rdbuf));
    read(fd,rdbuf,100);                //read the context in file

    printf("the file is: %s\n",rdbuf);

    munmap(pmap,10);

    close(fd);

    return 0;
}


 

main函数调用后运行效果图:

推荐阅读