<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程間通信之: 共享內存

進(jìn)程間通信之: 共享內存

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257124.htm

8.5

8.5.1概述

可以說(shuō),是一種最為高效的方式。因為進(jìn)程可以直接讀寫(xiě)內存,不需要任何數據的復制。為了在多個(gè)進(jìn)程間交換信息,內核專(zhuān)門(mén)留出了一塊內存區。這段內存區可以由需要訪(fǎng)問(wèn)的進(jìn)程將其映射到自己的私有地址空間。因此,進(jìn)程就可以直接讀寫(xiě)這一內存區而不需要進(jìn)行數據的復制,從而大大提高了效率。當然,由于多個(gè)進(jìn)程共享一段內存,因此也需要依靠某種同步機制,如互斥鎖和信號量等(請參考本章的共享內存實(shí)驗)。其原理示意圖如圖8.8所示。

圖8.8共享內存原理示意圖

8.5.2共享內存的應用

1.函數說(shuō)明

共享內存的實(shí)現分為兩個(gè)步驟,第一步是創(chuàng )建共享內存,這里用到的函數是shmget(),也就是從內存中獲得一段共享內存區域,第二步映射共享內存,也就是把這段創(chuàng )建的共享內存映射到具體的進(jìn)程空間中,這里使用的函數是shmat()。到這里,就可以使用這段共享內存了,也就是可以使用不帶緩沖的I/O讀寫(xiě)命令對其進(jìn)行操作。除此之外,當然還有撤銷(xiāo)映射的操作,其函數為shmdt()。這里就主要介紹這3個(gè)函數。

2.函數格式

表8.20列舉了shmget()函數的語(yǔ)法要點(diǎn)。

表8.20 shmget()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/types.h>
#includesys/ipc.h>
#includesys/shm.h>

函數原型

intshmget(key_tkey,intsize,intshmflg)

函數傳入值

key:共享內存的鍵值,多個(gè)進(jìn)程可以通過(guò)它訪(fǎng)問(wèn)同一個(gè)共享內存,其中有個(gè)特殊值IPC_PRIVATE。它用于創(chuàng )建當前進(jìn)程的私有共享內存

size:共享內存區大小

shmflg:同open()函數的權限位,也可以用八進(jìn)制表示法

函數返回值

成功:共享內存段標識符

出錯:-1

表8.21列舉了shmat()函數的語(yǔ)法要點(diǎn)。

表8.21 shmat()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/types.h>
#includesys/ipc.h>
#includesys/shm.h>

函數原型

char*shmat(intshmid,constvoid*shmaddr,intshmflg)

函數傳入值

shmid:要映射的共享內存區標識符

shmaddr:將共享內存映射到指定地址(若為0則表示系統自動(dòng)分配地址并把該段共享內存映射到調用進(jìn)程的地址空間)

shmflg

SHM_RDONLY:共享內存只讀

默認0:共享內存可讀寫(xiě)

函數返回值

成功:被映射的段地址

出錯:-1

表8.22列舉了shmdt()函數的語(yǔ)法要點(diǎn)。

表8.22 shmdt()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/types.h>
#includesys/ipc.h>
#includesys/shm.h>

函數原型

intshmdt(constvoid*shmaddr)

函數傳入值

shmaddr:被映射的共享內存段地址

函數返回值

成功:0

出錯:-1

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>