-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshare_queue.h
More file actions
40 lines (32 loc) · 1000 Bytes
/
share_queue.h
File metadata and controls
40 lines (32 loc) · 1000 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef _SHARE_QUEUE_H
#define _SHARE_QUEUE_H
#include <sys/ipc.h>
#include "sem_lock.h"
typedef struct queue_info
{
unsigned int push_pos;
unsigned int pop_pos;
unsigned int left_size;
unsigned int size;
}queue_info_t;
/* |queue_info|len|data|len|data| */
typedef struct shm_queue
{
queue_info_t *queue_info;
sem_lock_t *queue_lock;
sem_lock_t *empty_lock;
sem_lock_t *full_lock;
char *start;
int shmid;
}shm_queue_t;
int shm_queue_init(shm_queue_t *queue, const char *key_path, unsigned int size);
void shm_queue_clear(shm_queue_t *queue, int destroy);
//queue_info->left_size并不一直是对的,所以每次调用此函数时
//都需要做修正
unsigned int shm_queue_left_size(shm_queue_t *queue);
unsigned int shm_queue_size(shm_queue_t *queue);
int shm_queue_empty(shm_queue_t *queue);
int shm_queue_push(shm_queue_t *queue, const void *buf, unsigned len);
int shm_queue_pop(shm_queue_t *queue, void *buf, unsigned *len);
void shm_queue_stat(shm_queue_t *queue);
#endif