linux共享内存可以二维数组动态分配内存吗

传智播客旗下品牌:& & | && | && | &
改变中国IT教育,我们正在行动 &&&&全国咨询热线:400-618-4000
全国校区 
传智播客官方微信
黑马程序员官方微信
400-618-4000博客访问: 802585
博文数量: 131
博客积分: 182
博客等级: 入伍新兵
技术积分: 2213
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
原文地址: 作者:
&&&&&它是内存数据传递速度最快的,所以在很多时候都会用到共享内存的通信机制。
1,获得key值
ftok(argv[1],'k'))
2,创建共享内存获得ID;
shm_id = shmget(key,1024,IPC_CREAT | 0666))
3,映射共享内存
&shmat(shm_id,NULL,0)&&
4,解除映射
shmdt(add);
5,删除共享内存add
shmctl(shmid,cmd,NULL)
下面来实现两个进程对一个共享内存的数据交换:
read.c中代码如下
void handler_signal(int signum)
//./a.out .
int main(int argc, const char *argv[])
&//捕捉SIGUSR1
&if(signal(SIGUSR1,handler_signal) == SIG_ERR)
&&perror("Fail to signal");
&&exit(EXIT_FAILURE);
&if((key = ftok(argv[1],'k'))& < 0)
&&perror("Fail to key");
&&exit(EXIT_FAILURE);
&printf("key = %#x.\n",key);
& *int shmget(key_t key, size_t size, int shmflg);
& *第一个参数:
& *1.IPC_PRIVATE,每次都会获得一个新的共享内存,主要用于有亲缘关系的进程
& *2.通过ftok函数获得&&&&&&&&&&&&
& * key = ftok(pathname,字符);
& *第二个参数:
& *共享内存大小
& *第三个参数:
& *IPC_CREAT,IPC_EXCL,权限
&//如果对应的key的共享内存不存在,创建,然后返回其ID
&//如果对应的key的共享内存存在,直接返回ID
&if((shm_id = shmget(key,1024,IPC_CREAT | 0666)) < 0)
&&perror("Fail to shmget");
&&exit(EXIT_FAILURE);
&printf("shm_id = %d.\n",shm_id);
&//映射共享内存
&if( (&&& addr = (char *)shmat(shm_id,NULL,0)&& )&& == (char *)-1& )
&&perror("Fail to shmat");
&&exit(EXIT_FAILURE);
&//写自己PID到共享内存
&*( (int *)addr ) = getpid();
&&//等待被唤醒
&&pause();
&&printf("%s.\n",addr);
&&if(strncmp(addr,"quit",4) == 0)
&//解除映射
&if(shmdt(addr) < 0)
&&perror("Fail to shmdt");
&&exit(EXIT_FAILURE);
&//删除共享内存对象
&//真正删除:在共享内存映射次数为0的时候,才会删除
&if(shmctl(shm_id,IPC_RMID,NULL) < 0)
&&perror("Fail to shmctl");
&&exit(EXIT_FAILURE);
&exit(EXIT_SUCCESS);;
write.c中代码如下
//./a.out .
int main(int argc, const char *argv[])
&int peer_
&if((key = ftok(argv[1],'k'))& < 0)
&&perror("Fail to key");
&&exit(EXIT_FAILURE);
&printf("key = %#x.\n",key);
& *int shmget(key_t key, size_t size, int shmflg);
& *第一个参数:
& *1.IPC_PRIVATE,每次都会获得一个新的共享内存,主要用于有亲缘关系的进程
& *2.通过ftok函数获得&&&&&&&&&&&&
& * key = ftok(pathname,字符);
& *第二个参数:
& *共享内存大小
& *第三个参数:
& *IPC_CREAT,IPC_EXCL,权限
&//如果对应的key的共享内存不存在,创建,然后返回其ID
&//如果对应的key的共享内存存在,直接返回ID
&if((shm_id = shmget(key,1024,IPC_CREAT | 0666)) < 0)
&&perror("Fail to shmget");
&&exit(EXIT_FAILURE);
&printf("shm_id = %d.\n",shm_id);
&//映射共享内存
&if( (&&& addr = (char *)shmat(shm_id,NULL,0)&& )&& == (char *)-1& )
&&perror("Fail to shmat");
&&exit(EXIT_FAILURE);
&//从共享内存中读取对方PID
&peer_pid = *((int *)addr);
&&fgets(addr,1024,stdin);
&&addr[strlen(addr) - 1] = '\0';
&&//发信号唤醒对方
&&kill(peer_pid,SIGUSR1);
&exit(EXIT_SUCCESS);;
阅读(1756) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。请问有谁对Linux共享内存比较了解啊,C编程的?_linux吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:168,905贴子:
请问有谁对Linux共享内存比较了解啊,C编程的?收藏
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 动态内存分配算法 的文章

 

随机推荐