wangzhengquan
2020-07-14 e4ce347428a0d459c7561f7bb3e180f351c11a4f
queue/shm_queue_wrapper.c
@@ -1,6 +1,6 @@
#include "shm_queue_wrapper.h"
#include "mm.h"
#include "mem_pool.h"
#include "hashtable.h"
typedef struct ele_t {
@@ -12,12 +12,20 @@
   void *mqueue;
} shmqueue_t;
void shm_init(int size) {
   mem_pool_init(size);
}
void shm_destroy() {
   mem_pool_destroy();
}
/**
 * 创建队列
 * @ shmqueue 
 * @ key 标识共享队列的唯一标识, key是一个指针里面存储了key的值, 如果key的值为-1系统会自动分配一个key值并把该key的值赋给key指针。如果key的值不会空会检查是否有重复绑定的情况, 有重复就报错没有就创建队列并绑定key.
 * @ queue_size 队列大小
 * @ size 队列中元素大小
 */
void* shmqueue_create( int * key, int queue_size) {
   int  mkey;
@@ -28,7 +36,7 @@
   } else {
      mkey = *key;
      if(hashtable_get(hashtable, mkey)!= NULL) {
         err_msg(0, "key %d has already been in used!", mkey);
         err_exit(0, "key %d has already been in used!", mkey);
         return NULL;
      }
   }
@@ -40,12 +48,12 @@
}
/**
 * 绑定key到队列,但是并不会创建队列。如果没有对应指定key的队列提示错误并返回空值
 * 绑定key到队列,但是并不会创建队列。如果没有对应指定key的队列提示错误并退出
 */
void* shmqueue_attach(int key) {
   hashtable_t *hashtable = mm_get_hashtable();
   if(hashtable_get(hashtable, key)== NULL) {
      err_msg(0, "shmqueue_attach:attach failed, The queue  binding on key %d has not been created!", key);
      err_exit(0, "shmqueue_attach:attach queue at key %d  failed!", key);
      return NULL;
   }
@@ -175,3 +183,5 @@
      return 0;
   }
}