Linux環境下共享記憶體

2021-07-28 18:14:09 字數 1697 閱讀 7370

共享記憶體指 (shared memory)在多處理器的計算機系統中,可以被不同**處理(cpu)訪問的大容量記憶體。由於多個cpu需要快速訪問

儲存器,這樣就要對

儲存器進行

快取(cache)。任何乙個快取的資料被更新後,由於其他處理器也可能要訪問,共享記憶體就需要立即更新,否則不同的處理器可能用到不同的資料。共享記憶體是 unix下的

多程序之間的通訊方法 ,這種方法通常用於乙個程式的多

程序間通訊,實際上多個程式間也可以通過共享記憶體來傳遞資訊。

共享記憶體相比其他幾種方式有著更方便的資料控制能力,資料在讀寫過程中會更透明。當成功匯入一塊共享記憶體後,它只是相當於乙個字串指標來指向一塊記憶體,在當前程序下使用者可以隨意的訪問。缺點是,資料寫入程序或資料讀出程序中,需要附加的資料結構控制。

共享記憶體對映在程序位址空間的棧和堆之間

共享記憶體通過int shmget(key_t key, size_t size, int shm***);函式建立其中key是由ftok()函式自動獲取,size是所申請的共享記憶體的大小單位是位元組一般size是4096的整數倍,shm***為ipc_creat或者ipc_excl

用 int shmctl(int shmid, int cmd, struct shmid_ds *buf);函式刪除

申請到共享記憶體之後需要掛接到對應的程序上由 void *shmat(int shmid, const void *shmaddr, int shm***);函式實現

用 void *shmat(int shmid, const void *shmaddr, int shm***);函式解除掛接

com.h

#ifndef __shm__

#define __shm__

#include#include#include#include#includestatic shm(int size, int flag);

int create_shm(int size);

int get_shm();

char* at_shm(int shmid);

int dt_shm(char* addr);

int destory_shm(int shmid);

#endif //__shm__

com.c

#include"com.h"

static int shm(int size, int flag)

return shmid;

}int create_shm(int size)

int get_shm()

char* at_shm(int shmid)

int dt_shm(char* addr)

int destory_shm(int shmid)

server.c

#include"com.h"

int main()

dt_shm(str);

return 0;

}

client.c

#include"com.h"

int main()

dt_shm(str);

destory_shm(shmid);

return 0;

}

Linux下共享記憶體程式設計

利用共享記憶體 share memory 可以讓我們在任意兩個程序之間傳遞資料,而且也是相對容易實現的一種方法,在正常情況下,乙個程序所使用的記憶體是不允許其它程序訪問的,但是通過共享記憶體可以實現資料的共享。使用共享記憶體用到的api函式有 include include include key ...

Linux環境程序間通訊 共享記憶體

詳細內容出處 原理 mmap通過對映某個檔案來達到任意兩個程序之間的通訊。另外還可以通過匿名檔案對映的方式,來讓有親屬關係的程序也能互相通訊。所以mmap方式的共享記憶體又稱為對映記憶體。當然如果需要嚴格控制程序之間通訊的同步,可以使用到互斥量或者訊號量來控制。mmap的實現方式是通過各個程序不同的...

Linux 共享記憶體

一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...