使用 shmat 子例程创建共享内存段

本节描述如何使用 shmat 子例程创建共享内存段

必备任务或先决条件

无。

PROCEDURE

  1. 创建一个关键字以唯一地标识该共享段。 使用 ftok 子例程来创建密钥。 例如,要创建密钥mykey使用项目标识R包含在变量中proj(类型为 char) 和文件名 null_file,使用类似如下的语句:
    mykey = ftok( null_file, proj );
  2. 或者:
    • 使用 shmget 子例程创建共享内存段。 例如,要创建包含 4096 字节的共享段,并将 shmid 分配给整数变量mem_id,使用类似如下的语句:
      mem_id = shmget(mykey, 4096, IPC_CREAT | 0666 );
    • 使用 shmget 子例程获取先前创建的共享段。 例如,要获取已与密钥关联的共享段,请执行以下操作:mykey并将 shmid 分配给整数变量mem_id,使用类似如下的语句:
      mem_id = shmget( mykey, 4096, IPC_ACCESS );
  3. 使用 shmat 子例程将共享段连接到进程。 例如,要连接以前创建的段,请使用如下语句:
    ptr = shmat( mem_id, 0, 0 );
    在此示例中,变量ptr是指向定义共享段中的字段的结构的指针。 使用该模板结构以在共享段中存储并检索数据。 对于所有使用该段的进程,该模板应该是相同的。
  4. 使用模板结构处理段中的数据。
  5. 使用 shmdt 子例程从段拆离:
    shmdt( ptr );
  6. 如果不再需要共享段,请使用 shmctl 子例程将其从系统中除去:
    shmctl( mem_id, IPC_RMID, ptr );

    注: 您还可以使用 ipcs 命令获取有关段的信息,使用 ipcrm 命令除去段。