1、 建立獲取共享記憶體
1.1標頭檔案
#include
#include
1.2功能描述
建立或者獲取共享記憶體並返回描述符。
1.3 函式原型
int shmget(key_t key,size_t size,int shm***)
1.4 返回值
成功:返回建立或者獲取到的共享記憶體的描述符。
失敗:-1
1.5 引數說明
key:共享記憶體的鍵值
size:共享記憶體的大小
shm***:開啟標誌,如果使用了ipc_creat,則會新建立一塊共享記憶體。
2、 對映共享記憶體
2.1 標頭檔案
#include
#include
2.2 函式功能
把shmid指定的共享記憶體對映到程序的位址空間中去。
2.3 函式原型
void * shmat(int shmid,const void *shmaddr,intshm***)
2.4 返回值
返回對映到程序空間之後的記憶體位址。
2.5引數說明
shmid:要對映的共享記憶體的描述符
shmaddr:指定對映之後的位址,但是一般情況都讓該引數為空(null),使linux系統自動分配要對映的位址空間。
shm***:標誌
3、 脫離共享記憶體
3.1 標頭檔案
#include
#include
3.2 函式功能
從程序位址空間中斷掉與共享記憶體對映。
3.3 函式原型
int shmdt(const void *shmaddr)
3.4 返回值
成功:0
失敗:-1
3.5 引數說明
shmaddr:要斷開的共享記憶體的對映位址
4、 刪除共享記憶體
4.1 標頭檔案
#include
#include
4.2 函式功能
控制共享記憶體
4.3 函式原型
int shmctl(int shmid,int cmd,structshmid_ds *buf)
4.4 返回值
失敗:-1
成功:根據不同的操作返回不同的值
4.5 引數說明
shmid:要控制的共享記憶體的id
cmd:決定執行什麼樣的操作,如ipc_rmid(表示刪除共享記憶體)。
buf:獲取linux描述的共享記憶體的shmid_ds結構,基本不使用。
測試**:
read.c
#include #include #include #include #include struct sharememary
;struct sharememary * sharemem;
void main()
sharememaryarea = shmat(shmid,null,0);
if(sharememaryarea == (void*)-1)
sharemem = (struct sharememary *)sharememaryarea;
while(1)
else
}sleep(1);
}}
write.c
#include #include #include #include #include #include struct sharememary
;struct sharememary * sharemem;
void main()
sharememaryarea = shmat(shmid,null,0);
if(sharememaryarea == (void*)-1)
sharemem = (struct sharememary *)sharememaryarea;
sharemem->taxlifeflag = 0;
sharemem->hdlclifeflag = 0;
while(1)
else
sleep(1);
} }}
共享記憶體IPC入門學習
系統建立ipc通訊 如訊息佇列 共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到。ftok原型如下 key t ftok char fname,int id fname就時你指定的檔名 該檔案必須是存在而且可以訪問的 id是子序號,雖然為int,但是只有8個位元被使用 0 ...
Linux學習日誌 共享記憶體
一 什麼是共享記憶體 共享記憶體是屬於ipc inter process communication程序間通訊 機制,其它兩種是訊號量和訊息佇列,該機制為程序開闢建立了特殊的位址範圍,就像malloc分配那樣。程序能夠將同一段共享記憶體連線到自己的位址空間上。從而操作共享記憶體。所以說。共享記憶體提...
學習筆記之共享記憶體
共享記憶體 共享記憶體是程序間通訊方式中效率最高的一種,因為程序可以對記憶體進行直接讀寫,而沒有複製等其他操作,共享記憶體在核心中被建立,用時對映在使用者空間,在使用者空間操作。由於多個程序可同時訪問共享記憶體,因此需要同步和互斥機制配合使用 一 函式介面 申請key值,除建立共享記憶體以外的程序需...