shmget 函数 来创建共享内存
linux 系统提供共享内存的函数
头文件
#include <sys/ipc.h>
#include<sys/shm.h>
int shmget(key_t key,size_t size,int shmflg);
key参数 是ftok函数的唯一关键字 用来在系统中标识一块内存
size参数制定需要的共享内存 字节数
shmflg参数是内存的操作方式 有读写两种 成功返回共享内存的ID
void *shmat(int shmid,const void *shmaddr,int shmflg);
shmat 参数是获得ID的起始地址
shmid 参数是共享内存的ID
shmaddr参数参数指定了共享内存的地址 如果参数为0 表示让系统决定共享内存的地址 获取成功 函数返回对应的地址
int shmdt (const void *shamddr);
shmdt 函数是从程序中分离一块内存 参数shmaddr标识了要分离的共享内存的地址
上例子:
//写入共享内存
#include <sys/ipc.h>
#include<sys/shm.h>
#include<unistd.h>
#include<string.h>
int main()
{
int shmid;
char *ptr;
char *shm_str="string in a share memory";
shmid =shmget(0x90,1024,SHM_W|SHM_R|IPC_CREAT|IPC_EXCL);
if(shmid==-1)
{
perror("create share memory");
}
ptr=(char *)shmat(shmid,0,0);
if((void*)-1==ptr)
{
perror("the share memoy");
}
strcpy(ptr ,shm_str);
shmdt(ptr);
return 0;
}
//读出共享内存
#include <sys/ipc.h>
#include<sys/shm.h>
#include<unistd.h>
#include<string.h>
#include<stido.h>
int main()
{
int shmid;
char *ptr;
shmid = shmget (0x90,1024,SHM_W|SHM_R|IPC_EXCL);
if(shimd==-1)
{
perrpr("shmid the bad");
}
ptr= shmat(shmid,0,0);
if((void*)-1==0)
{
perror("get share memory");
}
pritnf("string in share memory :%s\n",ptr);
shmdt(ptr);
return 0;