共享記憶體:開闢一塊記憶體,同一主機上的程序可以訪問。
程式設計模型
a b
建立key ftok 建立key
建立共享記憶體 shmget 獲取共享記憶體
掛載共享記憶體 shmat 掛載共享記憶體
使用共享記憶體 *p 使用共享記憶體
解除安裝共享記憶體 shmdt 解除安裝共享記憶體
獲取共享記憶體狀態 shmctl
刪除共享記憶體 shmctl
建立共享記憶體需要確定主機上乙個位置。這個位置必須唯一,key是乙個唯一的整數,這個整數由乙個檔案的偏移量來確定。
ftok從乙個檔名獲得乙個唯一的整數key
# include
# include
key_t ftok(
const char *pathname,//檔名
int proj_id);//1-255的整數 保護碼
ftok使用檔案的偏移量經過保護碼的設定得到乙個整數。這個正整數用來確定乙個唯一的位址。
shm:share memory
#include
#include
int shmget(//成功返回shmid,失敗返回-1
key_t key, //ftok的返回值 乙個唯一的整數
size_t size, //大小
int shm***);//方式 ipc_creat
void *shmat(//成功返回記憶體位址,失敗返回-1
int shmid,//shmget的返回值
const void *shmaddr, //設定掛載位址 建議null,由系統選擇掛載位址
int shm***);//掛載後的記憶體使用方式 shm_rdonly
int shmdt(
const void *shmaddr);//shmat的返回值
共享記憶體的資料是什麼格式?
資料流 stream
資料有沒有邊界?
沒有邊界
資料有沒有順序? 沒有
資料有沒有狀態
管道的資料沒有狀態 shm的資料會儲存最後乙個
單工?雙工? 雙工
ls -a
ipcs -a 檢視shm sem msg
-m shm
-s sem
-q msg
ipcrm -a
-m shm
-s sem
-q msg
int shmctl(
int shmid, //指定shm的id
int cmd, //操作方式
ipc_stat 獲取shm的狀態
ipc_rmid 刪除shm
struct shmid_ds *buf);//狀態結構體,儲存shm的資訊
a
#include #include #include #include #include #include int shmid;
void hand(int s)
}int main()
return 0;
}
b
#include #include #include #include #include int main()
return 0;
}
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系統執行的每乙個程式,都是乙個程...