Linux共享記憶體

2021-10-14 15:48:01 字數 1570 閱讀 1055

總結本篇主要是本小白對linux 有名管道一些筆記,希望對一同學習linux的夥伴有所幫助。

如有發現錯誤,歡迎指出,一同進步!

示例:共享記憶體能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體。

主函式**如下:

#include

// 建立或獲取乙個共享記憶體:成功返回共享記憶體id,失敗返回-1

intshmget

(key_t key, size_t size,

int flag)

;void

*shmat

(int shm_id,

const

void

*addr,

int flag)

;int

shmdt

(void

*addr)

;// 斷開與共享記憶體的連線:成功返回0,失敗返回-1

intshmctl

(int shm_id,

int cmd,

struct shmid_ds *buf)

//銷毀該共享記憶體

(ipcs -m 檢視所有共享記憶體

ipcrm -m +共享記憶體id號 刪除該共享記憶體)

**如下(示例):

必須使用 shmat 函式連線該共享記憶體到當前程序的位址空間,連線成功後把共享記憶體區物件對映到呼叫程序的位址空間,隨後可像本地空間一樣訪問。

//寫程式

#include

#include

#include

#include

#include

//int shmget(key_t key, size_t size, int shm***);

//void *shmat(int shmid, const void *shmaddr, int shm***);

//int shmdt(const void *shmaddr);

//int shmctl(int shmid, int cmd, struct shmid_ds *buf);

intmain()

//讀程式

#include

#include

#include

#include

#include

//int shmget(key_t key, size_t size, int shm***);

//void *shmat(int shmid, const void *shmaddr, int shm***);

//int shmdt(const void *shmaddr);

//int shmctl(int shmid, int cmd, struct shmid_ds *buf);

intmain()

共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,建立一次即可,但多個程序都可以訪問。

Linux 共享記憶體

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

linux共享記憶體

linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...

linux 共享記憶體

共享記憶體解決的問題是 任意兩個程序之間的通訊如果是有名管道,是沒有辦法對管道中間的資料獲取讀和寫操作的,只能是兩段的資料,那麼如何對所有的資料進行操作 共享記憶體 共享記憶體也是通過核心來完成 命令 ipcs m p s 共享記憶體的工作機制如下所示 首先linux系統執行的每乙個程式,都是乙個程...