linux系统编程:进程间通信-mmap
来源:互联网 发布:游戏代练app源码 编辑:程序博客网 时间:2024/06/11 23:22
进程间通信-mmap
#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 fileZXangxiang
有了以上的基础,使用mmap进行进程间的通信就简单了。
CCPP Blog 目录
1 0
- linux系统编程:进程间通信-mmap
- linux 进程间通信之mmap
- Linux--mmap实现进程间通信
- 进程间通信-mmap
- linux系统编程:进程间通信-pipe
- linux系统编程:进程间通信-fifo
- 【Linux系统编程】进程间通信概述
- Linux进程间通信(IPC)编程实践(六)共享内存的使用-mmap
- Linux进程间通信源码剖析,共享内存(mmap)
- Linux下运用MMAP在进程间通信
- Linux进程间通信源码剖析,共享内存(mmap)
- Linux进程间通信--mmap共享内存(一)
- Linux进程间通信--mmap()共享内存(二)
- Linux进程间通信 -- mmap函数的使用
- linux 中mmap的用法(进程间通信-共享内存)
- Linux进程共享通信 -- mmap实现
- linux进程利用mmap映射区通信
- Linux系统编程——进程间通信概述
- PHP 开启 Sockets 模块
- MQ--API总结
- Building the main Guest Additions module
- 多态
- [一]三种 hls 解析源码 vlc ffmpeg exoplayer
- linux系统编程:进程间通信-mmap
- 第二周编程作业 信号报告
- 关于卷积---各行各业从业者的理解
- zjnu1181 石子合并【基础算法・动态规划】——高级
- [二]三种 hls 解析源码 vlc ffmpeg exoplayer
- 三分钟看懂Snmp协议分析
- [LeetCode][Java] Merge Intervals
- Codeforces Round #312 (Div. 2) 完整题解
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService