#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(void)
{
key_t key;
int shmid;
int proj_id;
//当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存
//IPC的通信模式下,不管是使用消息队列还是共享内存,甚至是信号量,每个IPC的对象(object)都有唯一的名字,称为“键”(key)。通过“键”,进程能够识别所用的对象。“
//通过“键”的使用也使得一个IPC对象能为多个进程所共用
key=IPC_PRIVATE;
shmid=shmget(key,1024,0660);
if(shmid==-1)
perror("cannot create a shared memory segment");
else
printf("1. key=IPC_PRIVATE, shared memory segment shmid= %d\n",shmid);
proj_id=1;
key=ftok("/home/program",proj_id);
if(key==-1)
perror("cannot generate IPC key");
shmid=shmget(key,1024,IPC_CREAT|0660);
if(shmid==-1)
perror("cannot create a shared memory segment");
else
printf("2. key=%d generated by ftok, shared memory shmid= %d\n",key,shmid);
// IPC_CREAT 如果共享内存不存在,则创建一个共享内存,否则打开操作。 IPC_EXCL 只有在共享内存不存在的时候,新的共享内存才建立,否则就产生错误
shmid=shmget(key,1024,IPC_CREAT |IPC_EXCL |0660);
if(shmid==-1)
perror("cannot create a shared memory segment");
shmid=shmget(key,1024,IPC_CREAT |0660);
if(shmid==-1)
perror("cannot create a shared memory segment");
else
printf("Access the existing shared memory segment\n");
return 0;
}