forked from nordic-institute/X-Road
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xmem.h
116 lines (96 loc) · 3.59 KB
/
xmem.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef __xmem_h
#define __xmem_h
#ifdef __cplusplus
extern "C"{
#endif
/**
read-write lock semafooride grupi baasil jagatud malu segmendi jaoks
====================================================================
liides kasutajaprogrammidega
----------------------------
yldist: koik funktsioonid tagastava 0, kui operatsioon onnestus ning
-1 kui mitte. xm->error seatakse sel juhul. funktsioonid ei blokeeru,
juhul kui pole teisti oeldud. kui protsess lopetab too enneaegselt
vabastatakse koik temaga seotud lukud automaatselt.
*/
/**
kasutaja ei vaja siit seest yhtki valja.
*/
struct xmem{
int semid; /* semafoori id */
int pshmid; /* viitesegmendi id */
int dshmid; /* andmesegmendi id */
void* pshmptr; /* viitesegmendi viit */
void* dshmptr; /* andmesegmendi viit */
int error; /* vaata seda paris errno asemel */
int rl_count; /* mitu readlocki see protsess/thread ise on jarjest teinud */
int wl_count; /* mitu writelocki see protsess/thread ise on jarjest teinud */
int perms; /* Kasutaja poolt avamisel ette antud permissioonid. */
};
/**
initsialiseerib objekti. kui semafoor ning jagatud malu segment puudusid, siis
loob ka need ning initsialiseerib. kui viga ei olnud annab tagasi 0, muidu -1 ja
seab errori. see funktsioon voib blokeeruda kui kaks protsessi yritavad tapselt
samal ajal semafoori ja segmenti luua.
Parameeter perms sisaldab permissioone.
*/
int xmem_open(struct xmem* xm, key_t key_sem, key_t key_mem, int perms);
/**
havitab objekti. kui tegu oli viimase viitega antud semaforile siis havitab
ka semafori ja jagatud malu segmendi.
*/
int xmem_close(struct xmem* xm);
/**
laseb objekti lahti. erinevalt xmem_close funktsioonist jaab objekt jagatud
mallu alles ka siis, kui ykski protsess seda enam ei kasuta
*/
int xmem_detach(struct xmem* xm);
/**
muudab jagatud malu segmendi suurust. algul on suurus 0. enne funktsiooni taitmist
tuleb saada write lock. vana segmendi sisu ei kopeerita
*/
int xmem_resize(struct xmem* xm, size_t size);
/**
muudab jagatud malu segmendi suurust ja kopeerib vana segmendi sisu uude.
algul on suurus 0. enne funktsiooni taitmist tuleb saada write lock.
*/
int xmem_resize_and_copy(struct xmem* xm, size_t size);
/**
lukustab segmendi lugemiseks. funktsioon voib blokeeruda. juhul kui samal protsessil
on juba kirjutamislukk annab tagasi -1 ja error on EWOULDBLOCK.
*/
int xmem_readlock(struct xmem* xm);
/**
yritab segmenti lukustada lugemiseks. juhul kui samal protsessil
on juba kirjutamislukk annab tagasi -1 ja error on EWOULDBLOCK.
*/
int xmem_tryreadlock(struct xmem* xm);
/**
lukustab segmendi kirjutamiseks. funktsioon voib blokeeruda. juhul kui samal
protsessil on juba lugemislukk annab tagasi -1 ja error on EWOULDBLOCK.
*/
int xmem_writelock(struct xmem* xm);
/**
yritab segmenti lukustada kirjutamiseks. juhul kui samal
protsessil on juba lugemislukk annab tagasi -1 ja error on EWOULDBLOCK.
*/
int xmem_trywritelock(struct xmem* xm);
/**
vabastab yhe luku. kui lukustamisfunktsioone on kasutatud mitu korda jarjest
tuleb ka avamisfunktsiooni mitu korda jarjest pruukida.
*/
int xmem_unlock(struct xmem* xm);
/**
tagastab jagatud malu segmendi pikkuse. enne selle funktsiooni kasutamist
tuleb votta mingi lukk. vea korral tagastab 0.
*/
size_t xmem_len(struct xmem* xm);
/**
tagastab pointeri jagatud malusegmendi algusele. enne selle funktsiooni
kasutamist tuleb votta mingi lukk. vea korral tagastab 0.
*/
void* xmem_ptr(struct xmem* xm);
#ifdef __cplusplus
}
#endif
#endif