Download this file

sysvshm.h    71 lines (64 with data), 2.4 kB

 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
/* Copyright (C) 2017-2018 J.F.Dockes
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _SYSVIPC_H_INCLUDED_
#define _SYSVIPC_H_INCLUDED_
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
class ShmSeg {
public:
ShmSeg(key_t ky, size_t size, bool create = false, int perms = 0600);
ShmSeg(const char*pathname, int proj_id, size_t size, bool create = false, int perms = 0600);
ShmSeg(int size) : ShmSeg(IPC_PRIVATE, size) {}
virtual ~ShmSeg();
virtual void setremove(bool onoff = true);
virtual void *getseg();
virtual size_t getsize();
virtual bool ok();
class Internal;
protected:
Internal *m;
};
// Shm segment with integrated lock. Note that the lock initialization
// is not protected, and that an external method is needed for the
// creating process to be left alone while it is creating the segment
// and initializing the lock.
//
// You need to use an Accessor object to get to the segment. This
// takes the lock on construction and releases it on deletion
class LockableShmSeg : public ShmSeg {
public:
LockableShmSeg(key_t ky, size_t size, bool create = false, int perms = 0600);
LockableShmSeg(const char*pathname, int proj_id, size_t size,
bool create = false, int perms = 0600);
LockableShmSeg(int size) : LockableShmSeg(IPC_PRIVATE, size) {}
virtual ~LockableShmSeg();
class Accessor {
public:
Accessor(LockableShmSeg&);
~Accessor();
void *getseg();
private:
LockableShmSeg& lss;
};
friend class Accessor;
private:
virtual void *getseg();
};
#endif /* _SYSVIPC_H_INCLUDED_ */