工作原理示意图:
     
    
   
      
    
   
   
    简单说明:
   
    
     eNB process
    
    
     是写进程,
    
    
     UE process
    
    
     是读进程。首先在他们之间设置一块
    
    
     shared memory
    
    
     ,其中前三个变量用于管理这个
    
    
     shared memory
    
    
     。
    
   
    
     shmid
    
    
     由三个信号量组成:
    
   
- 
     
 互斥信号量
 
 
 SEM_MUTEX
 
 
 :保证
 
 
 shared memory
 
 
 不会同时被两个进程访问。
 
- 
     
 可读资源信号量
 
 
 SEM_RD
 
 
 :当前
 
 
 shared memory
 
 
 中已被
 
 
 eNB process
 
 
 写好但还没有被
 
 
 UE process
 
 
 读取的
 
 
 shm_unit
 
 
 数量。初始化为
 
 
 shm_unit
 
 
 的大小
 
 
 SHMLEN
 
 
 。
 
- 
     
 可写资源信号量
 
 
 SEM_WR
 
 
 :当前
 
 
 shared memory
 
 
 中已被
 
 
 UE process
 
 
 读取但还没有被
 
 
 eNB process
 
 
 改写的
 
 
 shm_unit
 
 
 数量。初始化为
 
 
 0
 
 
 。
 
    
     shm_st
    
    
     中的
    
    
     shm_unit
    
    
     是一个环形缓冲区,当前写和读的指针分别是
    
    
     wr_ptr
    
    
     和
    
    
     rd_ptr
    
    
     ,均初始化为
    
    
     0
    
    
     。每写完一个
    
    
     unit
    
    
     ,
    
    
     wr_ptr
    
    
     自加
    
    
     1
    
    
     。每读完一个
    
    
     unit
    
    
     ,
    
    
     rd_ptr
    
    
     自加
    
    
     1
    
    
     。当这两个指针等于
    
    
     shm_unit
    
    
     的大小
    
    
     SHMLEN
    
    
     时,将它们重置为
    
    
     0
    
    
     。
    
   
    
     程序清单:
    
   
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h&
 
