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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
includefile(include/header)
COMMENT(manpage, section, releasedate, archive, short name)
manpage(FBB::SharedStream)(3bobcat)(_CurYrs_)(libbobcat-dev__CurVers_)
(I/O on shared memory)
manpagename(FBB::SharedStream)(I/O operations on shared memory)
manpagesynopsis()
bf(#include <bobcat/sharedstream>)nl()
Linking option: tt(-lpthread -lbobcat)
manpagedescription()
This class combines the features of the bf(std::istream) and
bf(std::ostream) classes, operating on shared memory. As with tt(std::fstream)
objects, a tt(seekp) or tt(seekg) member call is required to switch from
writing to reading or v.v.
As with tt(std::fstream) objects, bf(FBB::SharedStream) objects do not keep
separate offsets for reading and writing: the seek-members always refer to
the (single) offset maintained by the tt(FBB::SharedMemory) object to which
the bf(SharedStream) object interfaces.
So, although tt(tellg) and tt(tellp) return identical values, tt(tellg) should
not be called after writing to a bf(SharedStream) object, and tt(tellp) should
not be called after reading from a bf(SharedStream) object, as calling members
related to reading (tt(tellg)) after writing and v.v. put the stream in its
fail state.
includefile(include/namespace)
manpagesection(INHERITS FROM)
bf(FBB::SharedBuf) (private inheritance),nl()
bf(std::istream),nl()
bf(std::ostream),nl()
bf(FBB::SharedEnum__) (cf. bf(sharedmemory)(3bobcat) for a description of
this base class).
manpagesection(SIZEUNIT ENUMERATION)
The bf(enum SizeUnit) defines the following symbolic constants:
itemization(
it() bf(kB), representing 1024 (2**10) bytes of memory;
it() bf(MB), representing 1048576 (2**20 bytes of memory;
it() bf(GB), representing 1073741824 (2**30) bytes of memory
)
manpagesection(CONSTRUCTORS)
itemization(
itb(SharedStream())
The default constructor defines a stub a bf(SharedStream) object that
cannot immediately be used to access shared memory. To use it, its
member tt(open) must first be called.
itb(SharedStream(size_t maxSize, SizeUnit sizeUnit,
std::ios::openmode openMode = std::ios::in | std::ios::out,
size_t access = 0600))
This constructor creates a stream inheriting the facilities of an
tt(std::istream) and tt(std::ostream) that interfaces to a shared
memory segment having a capacity of at least tt(maxSize * sizeUnit)
bytes.
By default, the shared memory segment is opened for reading and
writing. Different from the open modes used for file streams, creating
a shared memory stream with open modes tt(ios::in | ios::out) is
OK. In this case the shared memory segment is created and once
information has been written to the shared memory it can also be read
again.
The shared memory's access rights are defined by the tt(access)
parameter, interpreted as an octal value, using the well-known
(bf(chmod)(1)) way to define the access rights for owner, group and
others.
If construction fails, an tt(FBB::Exception) is thrown.
itb(SharedStream(int id, std::ios::openmode openMode = std::ios::in |
std::ios::out))
This constructor creates a stream inheriting the facilities of an
tt(std::istream) and tt(std::ostream) that connects to a shared memory
segment having ID tt(id).
Specifying the tt(ios::trunc) flag immediately clears the content of
the shared memory.
An tt(FBB::Exception) is thrown if construction fails (e.g., no shared
memory segment having ID tt(id) exists),
)
Copy and move constructors (and assignment operators) are not available.
manpagesection(MEMBER FUNCTIONS)
All members of tt(std::istream) and tt(std::ostream) and the tt(enum)
values tt(kB, MB), and tt(GB), defined by tt(FBB::SharedEnum__) are available.
itemization(
itb(FBB::SharedCondition attachSharedCondition(std::ios::off_type offset,
std::ios::seekdir origin))
Returns an bf(FBB::SharedCondition)(3) object, interfacing to a shared
condition variable located at offset tt(offset) (relative to
tt(origin)) in the tt(SharedMemory) object to which the
bf(SharedStream) object interfaces. This member does not alter the
value returned by the stream's tt(tellg) and tt(tellp) members.
An tt(FBB::Exception) is thrown if the tt(FBB::SharedCondition) object
could not be constructed.
itb(FBB::SharedCondition createSharedCondition())
Returns an bf(FBB::SharedCondition)(3) object, interfacing to a newly
created shared condition variable which is created at the current
offset of the tt(SharedMemory) object to which the bf(SharedStream)
object interfaces (or at the first offset of the next physical shared
memory data block, cf. bf(sharedcondition)(3bobcat))). Creating a
tt(SharedCondition) object does not alter the value returned by the
stream's tt(tellg) and tt(tellp) members.
An tt(FBB::Exception) is thrown if the tt(FBB::SharedCondition) object
could not be constructed.
itb(int id() const)
The ID of the shared memory segment is returned.
itb(void kill())
Without locking the shared memory first, all shared memory is returned
to the operating system. The bf(FBB::SharedStream) object is unusable
after returning from tt(kill). Other processes that were using the
shared memory can continue to do so.
itb(void memInfo(std::ostream &out, char const *end = "\n"))
Information about the tt(SharedMemory) object is inserted into the
provide tt(ostream) object. The IDs of the shared segments, their
sizes, the maximum number of shared memory segments, the number of
bytes that can be read from the shared memory, and its actual storage
capacity, etc., are displayed. Following the information about the
shared memory, tt(end) is inserted into tt(out).
itb(void open(size_t maxSize, SizeUnit sizeUnit,
std::ios::openmode openMode = std::ios::in | std::ios::out,
size_t access = 0600))
This member creates a shared memory segment having a capacity of at
least tt(maxSize * sizeUnit) bytes, and connects the shared memory
segment to the bf(FBB::SharedStream). A matching tt(close) member does
not exist and is not required.
By default, the shared memory segment is opened for reading and
writing. Different from the open modes used for file streams, creating
a shared memory stream with open modes tt(ios::in | ios::out) is
OK. In this case the shared memory segment is created and once
information has been written to the shared memory it can also be read
again.
The shared memory's access rights are defined by the tt(access)
parameter, interpreted as an octal value, using the well-known
(bf(chmod)(1)) way to define the access rights for owner, group and
others.
If opening fails, an tt(FBB::Exception) is thrown.
itb(void open(int id, std::ios::openmode openMode = std::ios::in |
std::ios::out))
This member connects the bf(FBB::SharedStream) object to a shared
memory segment having ID tt(id). A matching tt(close) member does
not exist and is not required. If opening succeeds the shared
memory is ready for use.
Specifying the tt(ios::trunc) flag immediately clears the content of
the shared memory.
An tt(FBB::Exception) is thrown if opening fails (e.g., no shared
memory segment having ID tt(id) exists).
itb(void remove())
The shared memory is first locked. Next, all shared memory is returned
to the operating system. The bf(FBB::SharedStream) object is unusable
after returning from tt(remove). Other processes that were using the
shared memory can continue to do so.
itb(bool truncate(std::streamsize offset))
If tt(offset) is not exceeding the value returned by tt(seekg(0,
std::ios::end)), then this latter value is changed to tt(offset) and
tt(true) is returned. Otherwise tt(false) is returned, and the value
returned by tt(seekg) is not altered. If the value returned by
tt(tellg) exceeded tt(offset), tt(tellg)'s return value it is reduced
to tt(offset) as well. Subsequent read operations on the shared memory
can only succeed as long as tt(tellg)'s return value hasn't reached
the value tt(offset).
)
manpagesection(EXAMPLE)
verbinclude(../../sharedstream/driver/driver.cc)
manpagefiles()
em(bobcat/sharedstream) - defines the class interface
manpageseealso()
bf(bobcat)(7), bf(chmod)(1),
bf(isharedstream)(3bobcat),
bf(osharedstream)(3bobcat),
bf(sharedblock)(3bobcat),
bf(sharedcondition)(3bobcat),
bf(sharedmemory)(3bobcat)
bf(sharedmutex)(3bobcat),
bf(sharedpos)(3bobcat),
bf(sharedsegment)(3bobcat),
bf(sharedbuf)(3bobcat)
manpagebugs()
Note that by default exceptions thrown from within a bf(std::stream)
object are caught by the stream object, setting its tt(ios::failbit) flag. To
allow exceptions to leave a stream object, its tt(exceptions) member can be
called, e.g., using:
verb(
myStream.exceptions(ios::failbit | ios::badbit | ios::eofbit);
)
includefile(include/trailer)
|