linux中共享内存示例
2016-04-30 15:14
316 查看
/*所需头文件 #include<sys/ipc.h> #include<sys/type.h> #include<sys/shm.h> 函数原型 int shmget(key_t key,int size,int shmflg) 函数参数: key :IPC_PRIVATE 或 ftok的返回值 size:共享内存区大小 shmflg:权限位 返回值: 成功:共享内存段标识符 失败:-1 函数原型: void *shmat(int shmid,const void *shmaddr,int shmflg) 函数参数: shmid:要映射的共享内存区标识符 shmaddr:将共享内存映射到指定地址(NULL表示由系统自动完成映射) shmflg:SHM_RDONLY : 共享内存只读 默认0 :可读写 函数返回值: 成功:映射后的地址 失败:-1 函数原型: int shmdt(const void *shmaddr) 函数参数: shmaddr:共享内存映射后的地址 返回值: 成功:0 失败:-1 函数原型: int shmctl(int shmid,int cmd,struct shmid_ds *buf) 函数参数: shmid:要操作的共享内存段标识符 cmd: IPC_STAT :获取对象属性 IPC_SET : 设置对象属性 IPC_RMID:删除对象 (此时buf为NULL) buf : 指定IPC_STAT / IPC_SET时用以保存/设置属性 函数返回值: 成功:0 失败:-1 示例:*/ read.c #include<stdio.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> int main() { key_t key = ftok("/home",1122); if(key == -1) { perror("ftok fail!\n"); return -1; } int id = shmget(key,0,0); //打开共享内存段 if(id == -1) { perror("open fail!\n"); return -1; } char *p = shmat(id,NULL,0); //返回映射后的地址 if(p == NULL) { perror("shmat fail!\n"); return -1; } printf("%s\n",p); //读出内容 shmdt(p); //撤销共享内存映射 shmctl(id,IPC_RMID,NULL); //删除共享内存对象 return 0; } write.c #include<stdio.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> #include<string.h> int main() { key_t key = ftok("/home",1122); //用路径和整数创建唯一的key if(key == -1) { perror("ftok fail!\n"); return -1; } int id = shmget(key,4096,IPC_CREAT | 0660); //生成共享内存段标识符 if(id == -1) { perror("shmget fail!\n"); return -1; } char *p = shmat(id,NULL,0); //返回映射地址 if(p == NULL) { perror("shmat fail!\n"); return -1; } strcpy(p,"hello word!"); //写入内容 return 0; }
相关文章推荐
- 《Linux内核分析》学习总结与学习心得
- Kali2.0 USE
- centos7 gitlab
- linux设置可以在当前目录查找可执行文件的方法
- Linux文件读写权限
- 如何在Centos7上安装和使用ZFS
- Linux下Google Test (GTest)测试环境搭建步骤
- Windows10 安装 CentOS7(双系统)
- linux内核与分析 心得与体会
- Linux内核学习总结
- Linux内核分析课程总结
- 图解cygwin下进行Linux 内核hack失败记
- Linux系统崩溃,数据迁移
- Linux下用eclipse查看opencv源码
- Linux中gcc和cc的版本不一致的解决办法
- linux 娱乐软件和游戏安装方法目录
- linux可执行文件目录的区别
- centos locate搜索工具
- Linux磁盘分区与挂载
- CentOS通过日志反查入侵