Linux下C編程:共用記憶體通訊執行個體

來源:互聯網
上載者:User

共用記憶體是LUNIX 系統中最底層的通訊機制,也是最快速的通訊機制。共用記憶體通過兩個或多個進程共用同一塊記憶體地區來實現進程間的通訊。通常是由一個進程建立一塊共用

記憶體地區,然後多個進程可以對其進行訪問,一個進程將要傳出的資料存放到共用記憶體中,另一個或多個進程則直接從共用記憶體中讀取資料。因此這種通訊方式是最高效的處理序間通訊方式。但實際的問題在於,當兩個或多個進程使用共用記憶體進行通訊時,同步問題的解決顯得尤為重要,否則就會造成因不同進程同時讀寫一塊共用記憶體中的資料而發生混亂。在通常的情況下,通過使用訊號量來實現進程的同步。

以上兩個程式是一個處理序間通訊的例子。這兩個程式分別在不同的進程中運行,使用了共用記憶體進行通訊。b從鍵盤讀入資料,存放在共用記憶體中。a則從共用記憶體中讀取資料,顯示到螢幕上。由於沒有使兩個進程同步,顯示的內容將是雜亂無章的,對這一問題的處理將在進一步學習有關同步的操作之後完成。

執行個體b程式負責向共用記憶體中寫入資料,a程式負責從記憶體中讀出共用的資料,它們之間並沒有添加同步操作。

b.c

#include <sys/types.h>#include <sys/ipc.h>     #include <sys/shm.h>     #include <stdio.h>     #define BUF_SIZE 1024     #define MYKEY 25     int main()     {         int shmid;         char *shmptr;         if((shmid = shmget(MYKEY,BUF_SIZE,IPC_CREAT)) ==-1)         {         printf("shmget error \n");         exit(1);         }         if((shmptr =shmat(shmid,0,0))==(void *)-1)         {         printf("shmat error!\n");         exit(1);         }                  while(1)         {         printf("input:");         scanf("%s",shmptr);         }         exit(0);     }

a.c

#include <stdio.h>     #include <sys/types.h>#include <sys/ipc.h>     #include <sys/shm.h>     #define BUF_SIZE 1024     #define MYKEY 25     int  main()     {         int shmid;         char * shmptr;         if((shmid = shmget(MYKEY,BUF_SIZE,IPC_CREAT)) ==-1)         {         printf("shmget error!\n");         exit(1);         }    if((shmptr = shmat(shmid,0,0)) == (void *)-1)         {         printf("shmat error!\n");         exit(1);         }         while(1)         {         printf("string :%s\n",shmptr);         sleep(3);         }         exit(0);     }

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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