共享内存读写
shm_write.c
//int shmget(key_t key, size_t size, int shmflg)
//功能:创建或打开一块共享内存
//参数🔑IPC键值
// size:共享内存大小
// shmflg:位或权限位
// IPC_CREAT:创建
// IPC_EXCL:检测是否存在
//返回值:成功返回ID,失败-1
//void *shmat(int shmid, const void *shmaddr, int shmflg)
//功能:将一个共享内存映射到调用进程的数据段
//参数:shmid:共享内存ID
// shmaddr:共享映射内存地址,一般写NULL由系统指定
// shmflg:
// 0:共享内存可读可写
// SHM_RDONLY:只读
//返回值:成功返回地址,失败-1
//int shmdt(const void *shmaddr)
//功能:解除映射
//参数:共享内存地址
//返回值:成功0,失败-1
//int shmctl(int shmid, int cmd, struct shmid_ds *buf)
//功能:控制共享内存
//参数:shmid:共享内存标识符
// cmd:函数功能控制
// IPC_RMID:删除
// IPC_SET:设置参数
// IPC_STAT:保存参数
// IPC_LOCK:锁定
// buf:shmid_ds数据类型地址,用来存放属性
//返回值:成功0,失败-1
#include <stdio.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>
int main(int argc, char *argv[])
{
key_t key;
int shmid = 0;
char *str = NULL;
key = ftok(".", 1);
shmid = shmget(key, 1024, IPC_CREAT | 0666);
if(shmid == -1)
{
perror("shmget");
return 0;
}
str = (char *)shmat(shmid, NULL,0);
strcpy(str, "this is my data save to shared memory");
printf("copy data to shared memory success\n");
system("ipcs -m");
return 0;
}
shm_read.c
#include <stdio.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
key_t key;
int shmid = 0;
char *str = NULL;
int ret = 0;
key = ftok(".", 1);
shmid = shmget(key, 1024, IPC_CREAT | 0666);
if(shmid == -1)
{
perror("shmget");
return 0;
}
str = (char *)shmat(shmid, NULL,0);
printf("read data:%s\n", str);
if(shmdt(str) < 0)
{
perror("shmdt");
return 0;
}
ret = shmctl(shmid, IPC_RMID, NULL);
if(ret == -1)
{
perror("shmctl");
return 0;
}
system("ipcs -m");
return 0;
}
执行结果