在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 進程間通信之: 共享內(nèi)存

            進程間通信之: 共享內(nèi)存

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

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

            8.5

            8.5.1概述

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

            圖8.8共享內(nèi)存原理示意圖

            8.5.2共享內(nèi)存的應(yīng)用

            1.函數(shù)說明

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

            2.函數(shù)格式

            表8.20列舉了shmget()函數(shù)的語法要點。

            表8.20 shmget()函數(shù)語法要點

            所需頭文件

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

            函數(shù)原型

            intshmget(key_tkey,intsize,intshmflg)

            函數(shù)傳入值

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

            size:共享內(nèi)存區(qū)大小

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

            函數(shù)返回值

            成功:共享內(nèi)存段標識符

            出錯:-1

            表8.21列舉了shmat()函數(shù)的語法要點。

            表8.21 shmat()函數(shù)語法要點

            所需頭文件

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

            函數(shù)原型

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

            函數(shù)傳入值

            shmid:要映射的共享內(nèi)存區(qū)標識符

            shmaddr:將共享內(nèi)存映射到指定地址(若為0則表示系統(tǒng)自動分配地址并把該段共享內(nèi)存映射到調(diào)用進程的地址空間)

            shmflg

            SHM_RDONLY:共享內(nèi)存只讀

            默認0:共享內(nèi)存可讀寫

            函數(shù)返回值

            成功:被映射的段地址

            出錯:-1

            表8.22列舉了shmdt()函數(shù)的語法要點。

            表8.22 shmdt()函數(shù)語法要點

            所需頭文件

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

            函數(shù)原型

            intshmdt(constvoid*shmaddr)

            函數(shù)傳入值

            shmaddr:被映射的共享內(nèi)存段地址

            函數(shù)返回值

            成功:0

            出錯:-1

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            上一頁 1 2 3 下一頁

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉