一.共享内存常用函数介绍:
共享内存理解上可以看成上公交车,
只要开启映射就相当于上车。
此时车上的座位(数据)任你挑选使用。
下车就是解除映射关系。
1.共享内存的读取操作。
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main(int argc,char **argv)
{
key_t key=ftok(".",1);
if(key<0)
{
perror("key error:");
}
int s_id=shmget(key,1024,IPC_CREAT|0666);//获取共享内存的id
if(s_id<0)
{
perror("shmget error ");
}
char *str=(char *)shmat(s_id,NULL,0);//对获得的id进行共享内存映射
//对整形数据输出
//int *a=(int *)shmat(s_id,NULL,0);
while(1)//输出从共享内存中获取的数据内容
{
printf("read:%s \n",str);
//printf("read:%d\n",*a);
getchar();
}
int ret=shmdt(str);//关闭映射
//int ret=shmdt(a);
if(ret<0)
perror("shmdt error");
//设置和获取共享内存的相关属性
shmctl(s_id,IPC_RMID,NULL);//将内存中的数据进行删除
return 0;
}
2.共享内存的写入操作。
#include <stdio.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=ftok(".",1);
if(key<0)
{
perror("key error:");
}
int s_id=shmget(key,1024,IPC_CREAT|0666);
if(s_id<0)
{
perror("shmget error ");
}
char *str=(char *)shmat(s_id,NULL,0);
//给共享内存写入数据
//bzero(str,0);
//strcpy(str,"sdfsdfsfsdfsdfsf");
scanf("%s",str);
//对整形数据写入
//void *a=shmat(s_id,NULL,0);
//(int *)a;
//scanf("%d",a);
int ret=shmdt(str);
//int ret=shmdt(a);
if(ret<0)
perror("shmdt error");
printf("\nok");
return 0;
}