共享内存的打开/创建
#include"stdio.h"
#include"sys/types.h"
#include"sys/shm.h"
#include"signal.h"
#include"unistd.h"
#include"stdlib.h"
int main()
{
int shmid;
shmget(IPC_PRIVATE,128,0777);
if(shmid <0)
{
printf("创建共享内存失败\n");
return -1;
}
printf("创建共享内存成功 shmid=%d\n",shmid);
system("ipcs -m");//调用系统命令查看IPC对象
system("ipcrm -m shmid");//看完以后删除IPC对象
return 0;
}
删除失败可能是没有权限,手动命令行输入也可以
再用ftok创建看看key值是否为0
#include"stdio.h"
#include"sys/types.h"
#include"sys/shm.h"
#include"signal.h"
#include"unistd.h"
#include"stdlib.h"
int main()
{
int shmid;
int key;
key=ftok("./a.c",'a');
if(key <0)
{
printf("创建key失败\n");
return -2;
}
printf("创建key成功 key=%X\n",key);
shmid=shmget(key,128,IPC_CREAT | 0777);
if(shmid <0)
{
printf("创建共享内存失败\n");
return -1;
}
printf("创建共享内存成功 shmid=%d\n",shmid);
system("ipcs -m");//调用系统命令查看IPC对象
system("ipcrm -m shmid");//看完以后删除IPC对象
return 0;
}
#include"stdio.h"
#include"sys/types.h"
#include"sys/shm.h"
#include"signal.h"
#include"unistd.h"
#include"stdlib.h"
int main()
{
int shmid;
int key;
char *p;//shmat的返回值
key=ftok("./a.c",'a');
if(key <0)
{
printf("创建key失败\n");
return -2;
}
printf("创建key成功 key=%X\n",key);
shmid=shmget(key,128,IPC_CREAT | 0777);
if(shmid <0)
{
printf("创建共享内存失败\n");
return -1;
}
printf("创建共享内存成功 shmid=%d\n",shmid);
system("ipcs -m");//调用系统命令查看IPC对象
p=(char *)shmat(shmid,NULL,0);
if(p==NULL)
{
printf("共享内存映射失败\n");
return -3;
}
//写共享内存
fgets(p,128,stdin);//从键盘写入
//读共享内存
printf("共享内存data:%s",p);
//system("ipcrm -m shmid");//看完以后删除IPC对象
return 0;
}