Linux應用開發(十):共用記憶體通訊

來源:互聯網
上載者:User

一、雞肋

    1、共用記憶體是被多個進程共用的一部分記憶體。共用記憶體是進程間共用資料的一種最快的的方法,一個進程向共用記憶體地區寫入了資料,共用這個記憶體地區的所有進程就可以立刻看到其中的內容。

    2、共用記憶體的通訊方式,實現比較簡單,不需要專門的函數如:read、write


二、共用記憶體的實現:

    1、共用記憶體實現分為兩個步驟:

     
(1)建立共用記憶體:shmget(),shared memory get獲得一塊共用記憶體

           int shmget(key_t key,int size,int shmflg);

              i、參數:

                 key,標識共用記憶體的索引值=

                 ==0/IPC_PRIVATE,當key的取值為IPC_PRIVATE,則函數shmget()將建立一塊新的共用記憶體

                 ==0,如果key的取值為0,而參數shmflg中又設定IPC_PRIVATE這個標識,則同樣會建立一塊新的共用記憶體

                 size,建立共用記憶體的大小

               ii、傳回值:

                   ==如果成功,返回共用記憶體標識符;如果失敗,返回-1

       (2)映射共用記憶體:shmat(),shared memory at將這段建立的共用記憶體映射到具體的進程空間中去       

 void *shmat(int shmid, const void *shmaddr, int shmflg);

               i、參數:

                 
==shmid,這個參數是由shmget函數返回的共用記憶體標識符

                 
==flag,決定以什麼方式來確定映射的地址(通常為0)

                 
==shmaddr,指定共用記憶體的映射地址,通常我們設定為0,表示由系統幫我們去找一塊可用的共用記憶體位址

               ii、傳回值:

                  ==如果成功,則返回共用記憶體映射到進程中的地址;如果失敗,則返回-1。以後我麼對共用記憶體的操作就是對這個傳回值的操作。

       
(3)解除共用記憶體:shamdt(),shared memory detach,

            int shamdt(int shmid)

           
當一個進程不再需要共用記憶體時,需要把它從進程地址空間中脫離

                

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.