Linux-Function-mmap,mmap64,munmap;

mmap,mmap64,munmap---map or unmap files or devices into memory

void *mmap(void* addr,size_t length, int prot, int flags, int fd, off_t offset);

void *mmap64(void* addr,size_t length, int prot, int flags, int fd, off_t offset);

int munmap(void *addr, size_t lenght);

  mmap function creates a new mapping in the virtual address space of the calling process. The sharting address for the new mapping is

specipfied in addr. the lenght argument specifies the lenght of the mapping.

  If addr is NULL, then the kernel choses the address at which to create the mapping; this is the most portable method of createing a new

mapping.If addr is not NULL, then the kernel takes it as a hint about where to place mapping; on linux, the mapping will be created at a nerby

page boundary. The address of the new mapping is returned as the result of the call

  The contents of a file mapping. are initialized using lenght bytes starting at offset int the file referred to by the file descriptor fd. offset must

be a mutiple of the page size as returned by sysconf(SC_PAGE_SIZE).

  The prot argument describes the desired memory protection of the mapping.It is either PROT_NONE or the bitwise of one ro more of the following flags

Simple

int main()

{

  int fd = open("a.txt",O_CREAT|O_RDWR,0666);

  if(!fd)

    perror("open"),exit(-1);

  ftruncate(fd,sizoef(char)*6);

  void *p = mmap(0,sizeof(char*)*6,PROT_WRITE,MAP_SHARED,fd,0);

  char* pc = p;

  strncpy(pc,"Masato",6);

  munmap(p,sizeof(char)*6);

  close(fd);

  FILE* pf = fopen("a.txt","r");

  char buf[10] ={0};

  fgets(buf,sizeof(buf),pf);

  fwrite(buf,strlen(buf),1,stdout);

  fclose(pf);

  return 0;

}

时间: 2025-01-06 12:13:42

Linux-Function-mmap,mmap64,munmap;的相关文章

linux中mmap系统调用原理分析与实现

参考文章:http://blog.csdn.net/shaoguangleo/article/details/5822110 linux中mmap系统调用原理分析与实现 1.mmap系统调用(功能)      void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )      内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的

Linux的mmap内存映射机制解析

在讲述文件映射的概念时,不可避免的要牵涉到虚存(SVR 4的VM).实际上,文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施,好似用户将文件映射到自己地址空间的某个部分,使用简单的内存访问指令读写文件:另一方面,它也可以用于内核的基本组织模式,在这种模式种,内核将整个地址空间视为诸如文件之类的一组不同对象的映射.中的传统文件访问方式是,首先用open系统调用打开文件,然后使用read, write以及lseek等调用进行顺序或者随即的I/O.这种方式是非常低效的,每一次I/O操作都

mmap()与munmap()的小例子

mmap() 和 munmap() - Unix的系统函数,更贴近底层 void* mmap(void* addr,size_t size,int prot,int flags, int fd, off_t offset) 参数addr可以指定映射的首地址,一般为0 交给内核指定. size 就是分配内存的大小,映射时以 页 为单位. prot是分配内存的权限,一般用PROT_READ|PROT_WRITE      flags是标识,通常包括以下三个:          MAP_SHARED 

linux 进程间通信——内存共享映射mmap和munmap

IPC三种通信机制是指:信号量.共享内存.消息队列, 信号量:通过操作系统中的PV操作来实现: 共享内存:申请一块内存,进程A往共享内存中写,其他的进程就可以通过读出共享内存中的内容来获取进程A所传送的信息: 消息队列:创建一个消息队列,进程A往队列里面写,那么进程B通过读队列中的容来获取进程A传送的信息. mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来操做而不需要read/write函数. #include <sys/mman

Linux进程间通信--mmap共享内存(一)

共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间.进程A可以即时看到进程B对共享内存中数据的更新,反之亦然.由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以. 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入

Linux进程间通信--mmap()共享内存(二)

内核怎样保证各个进程寻址到同一个共享内存区域的内存页面 1.page cache及swap cache中页面的区分:一个被访问文件的物理页面都驻留在page cache或swap cache中,一个页面的所有信息由struct page来描述.struct page中有一个域为指针mapping ,它指向一个struct address_space类型结构.page cache或swap cache中的所有页面就是根据address_space结构以及一个偏移量来区分的. 2.文件与addres

linux function

#!/bin/bash function sayHello() { #这里的{ 和它前面的)之间可以没有空格 echo "Hello $1" } sayHello 'Neeky'

ftrace: tracing linux function calls

First confirm that you have root privilege. Second check the config of kernel that you have the configs on: CONFIG_FTRACE=y CONFIG_FUNCTION_GRAPH_TRACER=y CONFIG_EVENT_TRACING=y CONFIG_FUNCTION_TRACER CONFIG_STACK_TRACER CONFIG_DYNAMIC_FTRACE Last yo

Linux内存管理 (9)mmap(补充)

之前写过一篇简单的介绍mmap()/munmap()的文章<Linux内存管理 (9)mmap>,比较单薄,这里详细的梳理一下. 从常用的使用者角度介绍两个函数的使用:然后重点是分析内核的实现流程:最后对mmap()/munmap()进行一些验证测试. mmap系统调用并不完全是为了共享内存而设计的,它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件操作. mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以像访问普