-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathipc_util.h
63 lines (47 loc) · 1.15 KB
/
ipc_util.h
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef IPC_UTIL_H
#define IPC_UTIL_H
/*
用到的IPC机制:
- 信号量sem:用来同步
- 共享内存shm:用来传递数据
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <stddef.h>
#include <wait.h>
#include "ipc_exception.h"
namespace MY_IPC
{
extern SEM_EXCEPTION sem_exception;
extern SHM_EXCEPTION shm_exception;
// 联合体,用于semctl初始化
union semun
{
int val; /*for SETVAL*/
struct semid_ds *buf;
unsigned short *array;
};
/* 创建并初始化信号量 */
int create_sem(const char * path, int id, int sem_num, int val); // 多个信号量
/* 信号量p操作*/
void sem_wait(int sid, int sn);
/* 信号量v操作 */
void sem_signal(int sid,int sn);
/* 删除信号量 */
void remove_sem(int sid);
/* 创建共享内存区 */
int create_shm(const char *path, int id, size_t shmsize);
/* 删除共享内存区 */
void remove_shm(int shm_id);
/* 获取共享内存区地址 */
void * connect_shm(int shm_id);
/* 删除共享内存映射 */
void * cut_shm(const void * addr);
}
#endif