工作原理示意图:
简单说明:
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&