Linux笔记--共享内存
作者:互联网
介绍
共享内存是一段物理数据区域,可以被映射到多个进程进行直接读写访问。十分方便。
使用方式是 创建–映射–直接使用–取消映射–删除共享内存
函数
//创建并获取共享内存区
int shmget(key_t key, size_t size, int shmflg);
//映射内存
void *shmat(int shmid, const void *shmaddr, int shmflg);
//取消映射
int shmdt(const void *shmaddr);
//共享内存控制--用于删除共享内存区
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
举例
shareWrite.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>
#define SHMKEY 1234
#define SHMSIZE 4096
struct shmbuf{
char sbuf[32];
};
int main(){
int shmid;
void *shmaddr;
struct shmbuf *sbuf;
shmid = shmget(SHMKEY,SHMSIZE,IPC_CREAT|0666);
if(shmid == -1){
perror("shmget");
exit(1);
}
shmaddr = shmat(shmid,NULL,0);
if(shmaddr == NULL){
perror("shmat");
exit(1);
}
sbuf = (struct shmbuf*)shmaddr;
strcpy(sbuf->sbuf,"Hello,This is a shm test!");
printf("Send the msg");
shmdt(shmaddr);
while(1);
return 0;
}
shareRead.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>
#define SHMKEY 1234
#define SHMSIZE 4096
struct shmbuf{
char sbuf[32];
};
int main(){
int shmid;
void *shmaddr;
struct shmbuf *sbuf;
shmid = shmget(SHMKEY,SHMSIZE,0);
if(shmid == -1){
perror("shmget");
exit(1);
}
shmaddr = shmat(shmid,NULL,0);
if(shmaddr == NULL){
perror("shmat");
exit(1);
}
sbuf = (struct shmbuf*)shmaddr;
printf("Got the msg: %s\n",sbuf->sbuf);
shmdt(shmaddr);
shmctl(shmid,IPC_RMID,NULL);
return 0;
}
标签:共享内存,shmaddr,struct,--,sbuf,int,Linux,shmid,include 来源: https://blog.csdn.net/weixin_40293570/article/details/111505444