---
name: "sharedpos"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/sharedpos"
---

# sharedpos(3bobcat)

Shared Memory offset controller

## NAME

FBB::Sharedpos - Shared Memory offset controller

## SYNOPSIS

**#include \<bobcat/sharedpos\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

The class **SharedPos** is a support class for Bobcat’s shared memory handling classes. It controls the shared memory read/write ofset and ensures that shared memory operations never exceed the shared memory’s maximum offset.

The class **SharedPos** has several public members, but they are primarily useful for other *Shared\** classes offered by Bobcat. There is probably little use for a stand-alone **SharedPos** object.

In the descriptions of the class’s member functions *offset* refers to the read/write offset within a **FBB::SharedSegment**(3bobcat) object for which **SharedPos** performs the offset-administration.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

\-

## TYPEDEFS AND ENUMS

## CONSTRUCTORS

Default, copy and move constructors as well as the copy and move assignment operators are available. The default constructor does not yet monitor the offset of an *FBB::SharedSegment* object. The member *reset* is used to start monitoring offsets.

## OVERLOADED OPERATORS

- o

  **void operator++()**:\
   The offset is incremented. If this member is called when the offset is equal to the shared memory’s maximum offset an *FBB::Exception* is thrown.

-

  - o

  **void operator+=(size\_t len)**:\
   The offset is incremented by *len*. If *offset + len* exceeds the shared memory’s maximum offset then the offset is set to the maximum offset and an *FBB::Exception* is thrown.

-

  - o

  **std::ostream &operator\<\<(std::ostream &out, SharedPos const &pos)**:\
   Inserts information about the **SharedPos** object into *out*.

## MEMBER FUNCTIONS

Note: the behavior of member functions returning values which refer to information of an *FBB::SharedSegment* is undefined until the member *reset* has been called.

- o

  **bool atMaxOffset() const**:\
   Returns *true* if offset equals the maximum offset that can be used for the configured *FBB::SharedSegment* object.

-

  - o

  **size\_t blockIdx() const**:\
   The index of the configured *FBB::SharedSegment* object’s shared segment data block to which offset refers is returned.

-

  - o

  **size\_t blockOffset() const**:\
   The offset within the shared segment data block matching the member *offset*’s return value is returned.

-

  - o

  **bool eof() const**:\
   Returns *true* if offset exceeds the maximum offset of any character ever written to the shared memory to which the **SharedPos** object interfaces. If *eof* returns *true* information may still be *written* to the shared memory: writing is possible until the maximum shared memory segment offset has been reached.

-

  - o

  **std::streamsize eos() const**:\
   The offset just beyond the maximum offset for the current shared segment data block is returned. E.g., if *blockIdx* returns 5, and the size of the shared segment data blocks equals 2000, then *eos* returns 12000 (the first offset of segment 6).

-

  - o

  **std::streamsize maxOffset() const**:\
   The maximum possible offset that can be used for the currently monitored *FBB::SharedSegment* is returned.

-

  - o

  **std::streamsize offset() const**:\
   The offset within the currently monitored shared memory segment is returned.

-

  - o

  **void reset(SharedSegment \*sharedData)**:\
   The *SharedPos* object is reset to monitor the offset of the *FBB::SharedSegment* object whose address is passed as argument to *reset*. The address must point to a [**sharedsegment**(3bobcat)](/sharedsegment/3bobcat.md) object that must exist until the end of the **SharedPos** object’s lifetime or until its next *reset* call. Immediately after calling *reset* offset is reset to 0.

-

  - o

  **std::streamsize showmanyc() const**:\
   The number of characters that can be read from the current shared segment data block is returned.  This member interrogates the number of readable characters in the shared memory segment. This number may change while this member is being executed. In order to receive a stable return value, calling functions should have obtained a lock on the *FBB::SharedSegment* data before calling this member. See also the [**sharedsegment**(3bobcat)](/sharedsegment/3bobcat.md) man-page.

-

  - o

  **std::ios::pos\_type seek(std::ios::off\_type offset,** **std::ios::seekdir origin = std::ios::beg)**:\
   The monitored offset is changed to this member’s *offset* argument, relative to *origin*. Seeking beyond *eof* is OK. However, -1 is returned when seeking beyond *maxOffset* or seeking before the shared segment’s offset 0.

## EXAMPLE

See the [**sharedstream**(3bobcat)](/sharedstream/3bobcat.md) man page.

## FILES

*bobcat/sharedpos* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**isharedstream**(3bobcat)](/isharedstream/3bobcat.md), [**osharedstream**(3bobcat)](/osharedstream/3bobcat.md), [**sharedblock**(3bobcat)](/sharedblock/3bobcat.md), [**sharedcondition**(3bobcat)](/sharedcondition/3bobcat.md), [**sharedmemory**(3bobcat)](/sharedmemory/3bobcat.md), [**sharedmutex**(3bobcat)](/sharedmutex/3bobcat.md), [**sharedreadme**(7bobcat)](/sharedreadme/7bobcat.md), [**sharedsegment**(3bobcat)](/sharedsegment/3bobcat.md), [**sharedstream**(3bobcat)](/sharedstream/3bobcat.md), [**sharedbuf**(3bobcat)](/sharedbuf/3bobcat.md)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
