建立共享記憶體和操作共享記憶體幾個函式的用法
在建立共享記憶體和操作共享記憶體的時候被下面這些函式的引數弄糊塗了,
遂查詢資料寫下各個函式的說明。
所需標頭檔案
#include
#include
函式(1)shmget(key_t key,int size,int shmflag)
函式說明
shmget()用來取得引數key所關聯的共享記憶體識別代號,如果key是ipc_private則會建立新的共享記憶體,
其大小由size決定,如果key不為ipc_private,也不是已建立的ipc key,那麼系統回視引數
shmflag是否有ipc_creat位,來確定以ipc key為引數的key的
共享記憶體。如果引數shmflag包含了ipc_crate 和ipc_excl位,
而無法依引數key來建立共享記憶體,則表示該共享記憶體已存在。
錯誤**:
einval 引數size小於shmmin或大於shmmax
eexist 欲建立key所致新的共享記憶體,但已存在
eidrm 引數key所致的共享記憶體已刪除
enoent 引數key所指的共享記憶體不存在,引數shmflag也沒設定 ipc_creat位
enomem 核心記憶體不足
enospc 已超過系統允許可建立的共享記憶體最大值
(2)int shmdt(const void *shmaddr)
函式說明:
shmdt()用來將先前用shmat()連線好的共享記憶體脫離目前的程序,
引數shmaddr為先前shmat()返回的共享記憶體位址
(3)int shmctl(int shmid,int cmd,struct shmid_ds *buf)
shmctl()提供了幾種方式來控制共享記憶體操作,其中cmd有下列幾種數值:
ipc_stat 把共享記憶體的shmid_ds結構資料複製到引數buf
ipc_set 將引數buf所指的shmid_ds結構中的shm_perm.uid、shm_perm.gid
shm_perm.mode複製到共享記憶體的shmid_ds結構中
ipc_rmid 刪除共享記憶體和其資料結構
shm_lock 不讓此共享記憶體置換到swap
shm_unlock 允許此共享記憶體置換到swap
shm_lock 和shm_unlock為linux特有,且唯有超級使用者允許使用
shmid_ds 的結構定義如下
struct shmid_ds
;注意(1)要理解各個函式引數有哪些
(2)這些引數的作用是什麼
(3)這些會幫助理解函式的使用方法(工作機理)
建立共享記憶體和操作共享記憶體例項
#include
#include
#include
#include
#include
#define key 1234
#define size 1024
int main()
else
return 0;}
建立記憶體共享的幾個步驟
建立共享記憶體分以下幾個步驟 1.定義共享記憶體的結構體 3.定義指向共享記憶體結構體的指標psharemem,利用mapviewoffile函式將剛剛建立的記憶體對映到定義指標psharemem。讀寫共享記憶體分以下幾個步驟 1.定義共享記憶體的結構體 3.將共享記憶體對映為檔案指標 4.定義指向...
資料共享,記憶體對映檔案和虛擬記憶體,共享記憶體
記憶體對映檔案允許開發人員預定一塊位址空間區域並給區域調撥物理儲存器。記憶體對映檔案的物理儲存器來自磁碟已有的檔案,而不是來自系統的頁交換檔案。一旦把檔案對映到位址空間,就可以對它進行訪問,就好像整個檔案都已經被載入記憶體一樣。不必再對檔案執行i o操作。使用記憶體對映檔案來顛倒檔案內容時,先開啟檔...
Linux共享記憶體及共享記憶體API
共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...