问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux共享内存存在于进程空间的什么位置

发布网友 发布时间:2022-04-29 19:03

我来回答

1个回答

热心网友 时间:2022-06-20 05:41

  共享内存方式:从物理内存里面拿出来一部分作为多个进程共享。   共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入数据,共享这个内存的所有进程都可以立即看到其中内容。   共享内存实现步骤:   一、创建共享内存,使用shmget函数。   二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。   创建共享内存shmget:   intshmget(key_t key, size_t size, int shmflg)   功能:得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符。   key: 0(IPC_PRIVATE)会建立共享内存对象   size:大于0的整数,新建共享内存的大小,以字节为单位。只获取共享内存时,指定为0.   shmflg:   0表示取共享内存标识符,如不存在则函数会报错;   IPC_CREAT,如果内核中不存在键值与key相等的共享内存时,则创建一个共享内存;如果存在这样的共享内存则返回共享内存的标识符;   IPC_CREATIPC_EXCL: 如果内核中不存在键值与key相等的共享内存,则新建一个消息队列;如果存在这样的共享内存则报错;   函数返回值:成功则返回内存的标识符;出错则返回-1,错误原因存在于error中   映射共享内存到调用进程的地址空间shmat:   void*shmat(int shmid, const void *shmaddr, int shmflg)   msqid:共享内存标识符   shmaddr:指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置。   shmflg: SHM_RDONLY 只读模式,其他为读写模式   函数返回值:成功则返回附加好的共享内存地址;出错返回-1,错误原因存在于error中   断开共享内存连接shmdt:   intshmdt(const void *shmaddr)   功能:传入shmaddr,连接共享的内存起始地址;断开成功则返回0,出错则返回-1,错误原因存在于error中。   父子进程间通讯实例:   #include   #include   #include   #include   #include   #include   int main(int argc, char **argv){   if(argc< 2){ //需要输入共享的数据   printf("pleaseinput the shared data.n");   exit(-1);   }   intshmid;   shmid= shmget(0,1024,IPC_CREAT);   if(shmid== -1){ // 申请共享内存失败   printf("createshare memory failed.n");   exit(-1);   }   if(fork()){ // 父进程之中   char*p_shmaddr;   p_shmaddr= shmat(shmid, NULL, 0); // 映射到父进程之中的一个地址   memset(p_shmaddr,0, 1024); // 初始化共享内存   strcpy(p_shmaddr,argv[1]); // 拷贝共享数据到共享内存   wait(NULL); //等待子进程结束   exit(0);   }   else{   sleep(2); //等待父进程写入数据   char*c_shmaddr;   c_shmaddr= shmat(shmid,NULL,0); // 映射到子进程之中一个地址,具体由kernel 指配   printf("theshare data is: %sn", c_shmaddr); //子进程输出共享的数据   exit(0);   }   }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 腰间盘突出是怎么形成的?分为几种类型? 银行ecif系统是什么? 生活中的腰间盘突出是怎么回事?该怎么办呢? 腰间盘突出是怎么形成的? 想买一个4g手机价钱不超过1500,画面清晰,声音大声,内存大,网速快,相素要好, 腰间盘突出该怎么办? 16573599666是中国移动吗? 葫芦岛市怎么才能买到华为C8500.是不是只能在电信营业厅,如果在电信买多少钱,有最低消费吗?? 【拼多多】请确认:6781亲,恭喜您被葫芦岛市华为P30赢免单活动砸中!今日不领作废,请及时查收? 华为在葫芦岛有实体点吗 有的话具体位置在哪啊 腰间盘内突出的怎么治最好 葫芦岛华为售后地址在哪? 葫芦岛华为手机专卖店在什葫芦岛华为手机专卖店有几个都在什么地方么地方有几个 葫芦岛华为手机专卖店 吃鱼怎么吐刺 微信绑银行卡最少可以转多少 梦见吃鱼后吐出钉书针 怎么解释?》 微信绑定银行卡是不是就可以对方打多少钱过来就可以接受了吗? 蜀汉外交使者排名,第一毋容置疑,第二位是谁呢? 梦见很多老鼠,我在吃鱼,吐了很多鱼刺,老鼠把鱼刺吃掉了 linux 共享内存 可不可以不加锁呢? 系统有两个进程,一个负责写入,一个负责读取 linux共享内存的优点缺点 linux下通过shmget创建的共享内存,是属于用户空间还是内核空间? linux进程间通信问题 我想用共享内存的方式实现信号量控制一个不许并 ... linux共享内存如何实现 linux共享内存的本地通信 Linux系统下共享内存相关实验 什么是bass压缩 linux共享内存中实现 malloc等函数功能 贝司前级压缩电路原理 mxr m102压缩能用在bass上吗 组乐队BASS有必要买主动拾音器的吗?跟被动拾音的音色有什么区别?初级款... 贝斯高手来、问个问题 贝司效果器 电贝司需要用效果器吗? 新手去琴行买电贝司的问题!悬赏50满意追加 和女孩子聊天技巧 与女生聊天的技巧 和女生聊天有什么技巧吗? 和女生聊天有什么技巧?