linux共享内存 pdf,完整版)09_linux共享内存

《完整版)09_linux共享内存》由会员分享,可在线阅读,更多相关《完整版)09_linux共享内存(6页珍藏版)》请在人人文库网上搜索。

1、轻松入门实战应用从项目开发角度 为你搭建完整的知识体系wangbaominglinux共享内存-应用编程-专题讲座written by 王保明1共享内存基本概念共享内存共享内存区是最快的 ipc形式。一旦这样的内存映射到共享它的进程的地址空间, 这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系 统调用来传递彼此的数据。用管道或者消息队列传递数据用共享内存传递数据棲用共車内存区从91势H袴贝衣碎数幄户rtif2System V共享内存API共享内存数据结构及基本 API/* Own ership and permissi ons */struct shmid_ds siz。

2、e_tshm_segsz;time_tshm_atime;time_tshm_dtime;time_tshm_ctime;pid_tshm_c|struct ipc_perm shm_perm;/* Size of segme nt (bytes) */* Last attach time */* Last detach time */* Last cha nge time */* PID of creator */pid_tshmpid;/* PID of last shmat(2)/shmdt(2) */shmatt_tshm_ nattch; /* No. of curre nt att。

3、aches */ ;共享内存函数#in clude #in clude int shmget(key_t key, size_t size, int shmflg);void *shmat(int shmid, const void *shmaddr, int shmflg); int shmdt(c onst void *shmaddr);int shmctl(i nt shmid, int cmd, struct shmid_ds *buf);shmget函数功能:用来创建共享内存原型int shmget(key_t key, size_t size, int shmflg);参数key:。

4、这个共享内存段名字size共享内存大小shmflg:由九个权限标志构成,它们的用法和创建文件时使用的mode模式标志是一样的返回值:成功返回一个非负整数,即该共享内存段的标识码;失败返回-1shmat函数功能:将共享内存段连接到进程地址空间原型void *shmat(i nt shmid, const void *shmaddr, i nt shmflg);参数shmid:共享内存标识shmaddr:指定连接的地址shmflg:它的两个可能取值是 SHM_RND和SHM_RDONLY返回值:成功返回一个指针,指向共享内存第一个节;失败返回-1shmat函数(续)shmaddr为NULL,核心自。

5、动选择一个地址shmaddr不为NULL且shmflg无SHM_RND标记,则以 shmaddr为连接地址。 shmaddr不为NULL且shmflg设置了 SHM_RND标记,则连接的地址会自动向下调整 为 SHMLBA 的整数倍。公式:shmaddr - (shmaddr % SHMLBA)shmflg=SHM_RDONLY表示连接操作用来只读共享内存shmdt函数功能:将共享内存段与当前进程脱离原型int shmdt(c onst void *shmaddr);参数shmaddr:由shmat所返回的指针返回值:成功返回 0;失败返回-1注意:将共享内存段与当前进程脱离不等于删除共享内存。

6、段shmctl函数功能:用于控制共享内存 原型int shmctl(i nt shmid, int cmd, struct shmid_ds *buf);参数shmid:由shmget返回的共享内存标识码cmd:将要采取的动作(有三个可取值)buf:指向一个保存着共享内存的模式状态和访问权限的数据结构 返回值:成功返回0;失败返回-1shmctl函数(续)1命令IEC STATdm结枸申的敢強媛豊労典享向殍射圭节关礙值IFC_SET在活理有足够权限的话提下,把共亭内承勺当并关联值说暨为 shmid_ds&.磐暂中给出的值1FC RMID3共享内存API示例共享内存查看工具及共享内存命令/key。

7、shmidownerpermsbytesn attchstatus0x00002234 131073wbm01666680/int main (i nt argc, char *argv)int ret = 0;int shmid;/相当于打开文件,文件不存shmid = shmget(0x2234, sizeof(Teacher), IPC_CREAT | 0666); if (shmid = -1)perror(shmget err);return errno;printf(shmid:%d n, shmid);Teacher *p = NULL;p = shmat(shmid, NULL。

8、, 0);if (p = (void *) -1 )perror(shmget err);return errno;strcpy(p- n ame, aaaa);p-age = 33;shmdt(p);printf(”键入1删除共享内存,其他不删除n);int num;scan f(%d, &nu m);if (num = 1)ret = shmctl(shmid, IPC_RMID, NULL);if (ret name);printf(age:%d n, p -age); shmdt(p);/keyshmid0x00002234 131073/owner wbm01perms666bytes68n attch0statusprintf(键入1程序暂停,其他退出n);int num;scan f(%d, &num); if (num = 1)pause();return 0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值