linux系统编程:进程间通信-mmap
2015-07-15 19:23
597 查看
进程间通信-mmap
mmap本质是把内存与硬盘上的文件同步。某块内存中的内容会同步到硬盘文件上,即把文件映射到内存。故通过对同一文件的读写达到进程间的通信。
参数解释:
addr:指定对哪儿块内存实行映射。NULL表示由系统分配。
length:addr的长度
prot:内存块儿的属性:读、写、执行。
flag:内存块儿的内容是否同步到文件中。MAP_SHARED同步,MAP_PRIVATE不同步。
fd:文件描述符
offset:文件映射的起始位置
成功,返回映射的内存地址;失败返回void *(-1)。
mmap.c
文件file:zhangxiang
有了以上的基础,使用mmap进行进程间的通信就简单了。
CCPP Blog 目录
#include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *addr, size_t length);
mmap本质是把内存与硬盘上的文件同步。某块内存中的内容会同步到硬盘文件上,即把文件映射到内存。故通过对同一文件的读写达到进程间的通信。
参数解释:
addr:指定对哪儿块内存实行映射。NULL表示由系统分配。
length:addr的长度
prot:内存块儿的属性:读、写、执行。
flag:内存块儿的内容是否同步到文件中。MAP_SHARED同步,MAP_PRIVATE不同步。
fd:文件描述符
offset:文件映射的起始位置
成功,返回映射的内存地址;失败返回void *(-1)。
mmap.c
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> void sys_err(char *s) { perror(s); exit(1); } int main(int argc, char **argv) { if(argc < 2) { fprintf(stdin, "usage:./a.out filename"); return 1; } int fd; fd = open(argv[1], O_RDWR); if(fd < 0) sys_err("open"); off_t len; len = lseek(fd, 0, SEEK_END); void *mem; mem = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, 0); if(mem == MAP_FAILED) //#define MAP_FAILED ((void *) -1) sys_err("mmap"); /* if((void*)-1 == mem) sys_err("mmap"); */ close(fd); printf("%s\n", mem); *(char*)mem = 'Z'; *(char*)(mem + 1) = 'X'; if(-1 == munmap(mem, len)) sys_err("munmap"); return 0; }
文件file:zhangxiang
$ gcc mmap.c $ ./a.out file $ cat file ZXangxiang
有了以上的基础,使用mmap进行进程间的通信就简单了。
CCPP Blog 目录
相关文章推荐
- 每天一个linux命令(60):scp命令
- CentOS 安装软件时,错误Transaction check error ... file...conflicts with file from package zzz的解决
- linux配置IP的方法
- centos 6.5安装vncserver 并开启远程桌面
- Linux C 实现mycp 可以显示文件拷贝进度
- linux系统编程:进程间通信-fifo
- Linux-阿
- linux上安装subversion
- Linux——常用命令详解
- Linux——常用命令详解
- linux内存屏障浅析
- centos 下yum lock的解决办法
- 嵌入式linux之按键驱动程序
- Linux ls命令参数详解 <转>
- Linux 服务器安全技巧
- linux中时间设置date、hwclock、clock
- centos中mysql远程连接失败解决方案
- Linux下的passwd和shadow文件
- Linux 服务器安全技巧
- 查看linux发行版本