共享内存

#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;
}

你可能感兴趣的:(共享内存)