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

2021-07-27 08:37:43 字數 1246 閱讀 5950

#include 

#include

#include

struct shm共享記憶體使用的結構體的宣告

;int main(int argc, const

char *argv)

shmid = shmget(key,sizeof(struct shm),ipc_creat|ipc_excl|0666);//共享記憶體的獲取

if(-1 == shmid)else

}

shms = shmat(shmid,null,0);//共享記憶體的對映

if(-1 == *(int *)shms)

//通過最後乙個函式(共享記憶體的對映),shms指標指向的結構體成為共享記憶體中的結構體.

//可以通過shms指標來對結構體裡面的資料進行讀寫.

}

注意:如果記憶體中已經有以key建立的共享記憶體,而你想以key在建立乙個共享記憶體,會出現段錯誤.

一般在你修改共享記憶體結構體的時候會發生這種情況

而處理方法就是刪除共享記憶體

//首先檢視共享記憶體

ipcs -m -p

//刪除

ipcrm -m ipcrm命令用來刪除乙個或更多的訊息佇列、訊號量集或者共享記憶體標識。

ipcrm [ -m sharedmemoryid ] [ -m sharedmemorykey ] [ -q messageid ] [ -q messagekey ] [ -s semaphoreid ] [ -s semaphorekey ]

-m sharedmemory id 刪除共享記憶體標識 sharedmemoryid。與 sharedmemoryid 有關聯的共享記憶體段以及資料結構都會在最後一次拆離操作後刪除。

-msharedmemorykey 刪除用關鍵字 sharedmemorykey 建立的共享記憶體標識。與其相關的共享記憶體段和資料結構段都將在最後一次拆離操作後刪除。

-q messageid 刪除訊息佇列標識 messageid 和與其相關的訊息佇列和資料結構。

-qmessagekey 刪除由關鍵字 messagekey 建立的訊息佇列標識和與其相關的訊息佇列和資料結構。

-s semaphoreid 刪除訊號量標識 semaphoreid 和與其相關的訊號量集及資料結構。

-ssemaphorekey 刪除由關鍵字 semaphorekey 建立的訊號標識和與其相關的訊號量集和資料結構。

程序間通訊方式 4 共享記憶體 shm

共享記憶體就是允許兩個或多個程序共享一定的儲存區。就如同 malloc 函式向不同程序返回了指向同乙個物理記憶體區域的指標。當乙個程序改變了這塊位址中的內容的時候,其它程序都會察覺到這個更改。因為資料不需要在客戶機和伺服器端之間複製,資料直接寫到記憶體,不用若干次資料拷貝,所以這是最快的一種ipc。...

Linux下程序通訊 共享記憶體之 shm

程序通訊 程序與程序間的資料交換,稱為程序通訊。程序通訊的方式有 共享記憶體 訊號量 管道 訊息佇列 socket等等。共享記憶體 核心管理一片物理記憶體,允許不同的程序同時對映,多個程序可以對映同一塊記憶體,被多個程序同時對映的物理記憶體,即共享記憶體。對映物理記憶體叫掛接,用完以後解除對映叫脫接...

程序間通訊之共享記憶體

此程式實現兩個普通程序間通過共享記憶體來進行通訊,共享記憶體能夠進行大資料量的通訊,這一點事訊息佇列無法比擬的。在這裡同時使用了訊號量來保證兩個程序間的讀寫同步。傳送端源 include include include include include include include include ...