linux系統程式設計——實現共享記憶體
阿新 • • 發佈:2021-02-17
linux系統程式設計——實現共享記憶體
一、相關的API
(1)shmget 建立或者獲取一個共享記憶體,成功返回共享記憶體ID,失敗返回-1。——建立共享記憶體
man手冊: man 2 shmget
key_t: 輸入 key就可以
size:共享記憶體的大小以兆對齊
flag:開啟佇列的方式,一般為IPC_CREAT
(2)shmat 連線共享記憶體到當前程序的地址空間:成功返回指向共享記憶體的指標,失敗返回-1。——對映共享記憶體
man手冊:man 2 shmat
shmid:共享記憶體的id
第二個一般寫0,讓linux核心幫我們自動的安排共享記憶體
shmat作用:共享記憶體掛載到程序或者程式的儲存空間,在儲存空間中,定義一個變數,指向共享記憶體。
0666可讀可寫的許可權
(3) shmdt 斷開與共享記憶體的連線:成功返回0,失敗返回-1。——釋放共享記憶體
man手冊:man 2 shmdt
按照第四行寫
(4)shmctl 控制共享記憶體的資訊,成功返回0,失敗返回-1。——幹掉共享記憶體
man手冊:man 2 shmctl
第一個是 id
第二個是指令
第三個一般寫0
二、程式碼實現
(1)共享記憶體——寫
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
//int shmget(key_t key, size_t size, int shmflg);
int main()
{
int shmid;
char *shmaddr;
key_t key;
key=ftok(".",1);
shmid=shmget(key,1024*4,IPC_CREAT|0600);
if (shmid==-1)
{
printf("shmget no OK\n");
exit(-1);
}
shmaddr=shmat(shmid,0,0);
printf("shmat ok\n");
strcpy(shmaddr,"bha hen shuai");
sleep(5);//睡眠5秒
shmdt(shmaddr);
shmctl(shmid, IPC_RMID,0);
printf("quit\n");
return 0;
}
執行結果:
(2)共享記憶體——讀
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//int shmget(key_t key, size_t size, int shmflg);
int main()
{
int shmid;
char *shmaddr;
key_t key;
key=ftok(".",1);
shmid=shmget(key,1024*4,0);
if(shmid==-1)
{
printf("shmget no OK\n");
exit(-1);
}
shmaddr=shmat(shmid,0,0);
printf("shmat ok\n");
printf("data: %s\n",shmaddr);
shmdt(shmaddr);
printf("quit\n");
return 0;
}
執行結果:
——@上官可程式設計