linux程序間通訊之共享記憶體

2021-05-21 21:40:18 字數 685 閱讀 1140

共享記憶體塊提供了在任意數量的程序之間進行高效雙向通訊的機制。每個使用者都可以讀取寫入資料,但是所有程式之間必須達成並遵守一定的協議,以防止諸如在讀取資訊之前覆寫記憶體空間等競爭狀態的出現。不幸的是,linux無法嚴格保證提供對共享記憶體塊的獨佔訪問,甚至是在您通過使用ipc_private建立新的共享記憶體塊的時候也不能保證訪問的獨占性。 同時,多個使用共享記憶體塊的程序之間必須協調使用同乙個鍵值。

#include

#include

#include

#include

#include

int main()

else

printf("shmid共享記憶體分配成功,共享記憶體識別代號為:%d。/n",shmid);

if((pid=fork())<0)

else if(pid>0)//父程序,向共享記憶體中寫入資料

else

}else//子程序,從共享記憶體中讀取資料

else

else

else

printf("shmdt共享記憶體斷開成功。/n");

if(shmctl(shmid,ipc_rmid,null)<0)//刪除共享記憶體及其資料結構

else

printf("shmctl刪除共享記憶體及其資料結構成功。/n");

exit(0);

}}   }}

Linux 程序間通訊之共享記憶體

1.什麼是共享記憶體?2.共享記憶體優缺點 優點 採用共享記憶體的乙份好處是效率高,因為程序可以直接讀寫空間,不需要資料拷貝,而訊息佇列與管道都經過了2次拷貝,寫端寫的時候往佇列拷貝乙份,讀端讀的時候又拷貝了乙份。缺點 以前的程序間通訊都自帶同步互斥機制,但共享記憶體並沒有,需要自己加鎖。3.實現 ...

linux程序間通訊之共享記憶體

共享記憶體可以說是最有用的程序間通訊方式,也是最快的ipc形式。兩個不同程序a b共享記憶體的意思是,同一塊物理記憶體被對映到程序a b各自的程序位址空間。程序a可以即時看到程序b對共享記憶體中資料的更新,反之亦然。由於多個程序共享同一塊記憶體區域,必然需要某種同步機制,互斥鎖和訊號量都可以。採用共...

Linux 程序間通訊之共享記憶體

一 共享記憶體的概念 a int a 10 printf d n a b int a 10 printf d n a 這兩個程序中的a是沒有關係的。那麼共享記憶體就是記憶體上開闢的一塊區域,能使得ptra和ptrb都指向這個空間,這樣ptra可以在這個空間寫東西,ptrb去檢視的時候會看到a所寫的東...