使用mmap实现进程间通信
2016-01-08 13:29
363 查看
#include <sys/types.h> #include <sys/mman.h> #include <err.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { const char str1[] = "string 1"; const char str2[] = "string 2"; int parpid = getpid(), childpid; int fd = -1; char *anon, *zero; if ((fd = open("/dev/zero", O_RDWR, 0)) == -1) err(1, "open"); anon = (char*)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0); zero = (char*)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0); if (anon == MAP_FAILED || zero == MAP_FAILED) errx(1, "either mmap"); strcpy(anon, str1); strcpy(zero, str1); printf("PID %d:\tanonymous %s, zero-backed %s\n", parpid, anon, zero); switch ((childpid = fork())) { case -1: err(1, "fork"); case 0: childpid = getpid(); printf("PID %d:\tanonymous %s, zero-backed %s\n", childpid, anon, zero); sleep(3); printf("PID %d:\tanonymous %s, zero-backed %s\n", childpid, anon, zero); munmap(anon, 4096); munmap(zero, 4096); close(fd); return EXIT_SUCCESS; } sleep(2); strcpy(anon, str2); strcpy(zero, str2); printf("PID %d:\tanonymous %s, zero-backed %s\n", parpid, anon, zero); munmap(anon, 4096); munmap(zero, 4096); close(fd); return EXIT_SUCCESS; }
相关文章推荐
- 使用批处理文件启动/关闭 oracle 11g 的相关服务
- LeetCode Rotate Image
- JavaScript跨域总结与解决办法
- js中 正則表達式
- 牛客网-《剑指offer》-变态跳台阶
- CSS之网页弹窗插件
- 正则表达式的汉字匹配
- 用数据库连接池解决org.hibernate.exception.JDBCConnectionException:could not execute query
- 个别二次开发电脑无法保存功能里面代码的解决方法
- 浅析arm的异常、中断和arm工作模式的联系
- 负载均衡之基于DNS负载
- go开发
- 个别二次开发电脑无法保存功能里面代码的解决方法
- 11.动态单元格的创建
- 后悬挂类型
- IOS的处理touch事件处理(按照手指的移动移动一个圆,开发环境用的ios7,storyboard)
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(九)之Interfaces
- iOS二级tabView,左右两个tableView,点左边,刷新右边
- oracle impdp/expdp 的权限问题
- 静态(static)方法不可以重写(override)