#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//共享内存的创建/删除(映射)
int main()
{
int shmid;
shmid = shmget(IPC_PRIVATE,128,0777);
if(shmid < 0)//判断共享内存是否创建成功
{
printf("create share memory failed!\n");
return -1;
}
printf("create share memory success ,shmid = %d\n",shmid);//打印共享内存ID
system("ipcs -m");
return 0;
}
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//共享内存的映射
int main()
{
int shmid;
int key;
char *p;
key = ftok("msg.c",1);
if(key < 0)//判断ftok是否创建成功
{
printf("ftok failed\n");
return -2;
}
printf("ftok success ,key:%x\n",key);
shmid = shmget(key,128,IPC_CREAT|0777);
if(shmid < 0)//判断共享内存是否创建成功
{
printf("create share memory failed!\n");
return -1;
}
printf("create share memory success ,shmid = %d\n",shmid);
system("ipcs -m");//ipcs -m指令,查看共享内存进程
p = (char *)shmat(shmid,NULL,0);
if(p == NULL)//判断是否映射成功
{
printf("shmat funtion failed!\n");
return -3;
}
//相当于半双工读写
//write to share memory
fgets(p,128,stdin);
//read from share memory
printf("share memory data is %s\n",p);
return 0;
}
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//删除共享内存(对象)
int main()
{
int shmid;
int key;
char *p;
key = ftok("msg.c",1);
if(key < 0)
{
printf("ftok failed\n");
return -2;
}
printf("ftok success ,key:%x\n",key);
shmid = shmget(key,128,IPC_CREAT|0777);
if(shmid < 0)
{
printf("create share memory failed!\n");
return -1;
}
printf("create share memory success ,shmid = %d\n",shmid);
system("ipcs -m");
p = (char *)shmat(shmid,NULL,0);
if(p == NULL)
{
printf("shmat funtion failed!\n");
return -3;
}
//write to share memory
fgets(p,128,stdin);
//read from share memory
printf("share memory data is %s\n",p);
shmdt(p);
shmctl(shmid,IPC_RMID,NULL);
system("ipcs -m");
return 0;
}
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <string.h>
//共享内存实现ipcrm
int main(int argc,char *argv[])
{
int shmid;
if(argc < 3)
{
printf("input error!\n");
return -1;
}
if(strcmp(argv[1],"-m") == 0)
{
printf("delete share memory\n");
}
else
{
return -2;
}
shmid = atoi(argv[2]);
printf("delete share memory id :%d\n",shmid);
shmctl(shmid,IPC_RMID,NULL);
system("ipcs -m");
return 0;
}