博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程间通信:共享内存
阅读量:6334 次
发布时间:2019-06-22

本文共 1871 字,大约阅读时间需要 6 分钟。

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
/*int shm_open(const char *name, int oflag, mode_t mode);//创建或打开一个共享内存,成功返回一个整数的文件描述符,错误返回-1。name : 共享内存区的名字;oflag: 标志位;open的标志一样mode : 权限位编译时要加库文件-lrt*/#ifndef T_DESC#define T_DESC(x, y) (y)#endif#if T_DESC("TU1", 1)#define SHM_NAME "shm_ram"#define FILE_SIZE 4096#define WRITE_STR "to be or not to be"int tu1_proc(int argc, char **argv){ int param = 0; int ret = -1; int fd = -1; char buf[4096] = { 0}; void* map_addr = NULL; if (argc < 2) { printf("param error\n"); goto _OUT; } param = atoi(argv[1]); //创建或者打开一个共享内存 fd = shm_open(SHM_NAME, O_RDWR|O_CREAT, 0644); if(-1 == (ret = fd)) { perror("shm failed: "); goto _OUT; } //调整确定文件共享内存的空间 ret = ftruncate(fd, FILE_SIZE); if(-1 == ret) { perror("ftruncate faile: "); goto _OUT; } //映射目标文件的存储区 map_addr = mmap(NULL, FILE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if(NULL == map_addr) { perror("mmap add_r failed: "); goto _OUT; } if (param > 0) { // read memcpy(buf, map_addr, sizeof(buf)); printf("read: %s\n", buf); } else { // write memcpy(map_addr, WRITE_STR, strlen(WRITE_STR)); printf("write: %s\n", WRITE_STR); } //取消映射 ret = munmap(map_addr, FILE_SIZE); if(-1 == ret) { perror("munmap add_r faile: "); goto _OUT; } if (param > 0){ //删除内存共享 shm_unlink(SHM_NAME); if(-1 == ret) { perror("shm_unlink faile: "); goto _OUT; } } _OUT: return ret;}#endif#if T_DESC("global", 1)void usage(){ printf("\n Usage:
<...>"); printf("\n 1 -- shm test"); printf("\n => P1: 0 - write; 1 - read"); printf("\n");}int main(int argc, char **argv){ int ret; if(argc < 2) { usage(); return 0; } int tu = atoi(argv[1]); if (tu == 1) ret = tu1_proc(argc - 1, &argv[1]); return ret;}#endif#if T_DESC("readme", 1)/*1, how to compile gcc -o shm.out shm.c -lrt*/#endif

 

转载地址:http://mnsoa.baihongyu.com/

你可能感兴趣的文章
tomcat启动报错
查看>>
mongorocks引擎原理解析
查看>>
用Swift实现一款天气预报APP(一)
查看>>
oracle11g R2 RAC卸载grid
查看>>
ES6 结构和扩展运算符
查看>>
王利阳:电商大促 决战6.18
查看>>
kafka消息传输的事务定义
查看>>
实现LNMMP
查看>>
mysql的pid文件出现问题
查看>>
计算rem单位
查看>>
第七章 大网高级 ASA
查看>>
rsync+inotify触发式远程同步
查看>>
优秀设计师应当知道的几大UI设计原则(一)
查看>>
mongodb高级查询
查看>>
struts2.1 struts.devMode BUG解决方案
查看>>
日本法院裁定三星诉苹果专利侵权案败诉
查看>>
Windows Server 2012R2 桌面体验问题直通车
查看>>
Springboot配置文件读取报错Configuration property name 'projectUrl' is not valid:
查看>>
HTTP状态码
查看>>
今天的学习
查看>>