// Copyright (c) 1999-2000 David Muse
// See the COPYING file for more information.
#ifndef SHAREDMEMORY_H
#define SHAREDMEMORY_H
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
// Shared memory segments allow multiple processes to access a common
// address space.
//
// Shared memory can be used for interprocess communication and is generally
// faster than using fifo's or unix sockets.
//
// To synchronize access to shared memory, use the semaphoreset class.
//
// A shared memory segment is owned by a user and group and has access
// permissions just like a file.
class sharedmemory {
public:
sharedmemory();
// Creates a shared memory segment.
virtual ~sharedmemory();
// Cleans up and removes the shared memory segment if
// it was created by the create() or createOrAttach()
// method below. If it was just attached to, it is
// not removed.
int create(key_t key, int size, mode_t permissions);
// Creates a shared memory segment of "size" bytes,
// identified by "key".
// "key" should be generated using the ftok
// function.
// "permissions" sets the access permissions
// for the segment.
int attach(key_t key);
// Attaches to a shared memory identified by "key".
int createOrAttach(key_t key, int size, mode_t permissions);
// Attempts to create the shared memory segment
// identified by "key". If this fails, it attempts
// to attach to a shared memory segment identified by
// "key".
void dontRemove();
// Instructs the destructor not to remove the shared
// memory segment if it was created during a call to
// create() or createOrAttach() above. This is useful
// if an application creates a shared memory segment
// then forks and wants to delete the shared memory
// segment in the forked process but does not want
// the segment removed from the system.
int forceRemove();
// Removes the shared memory segment whether it was
// created or just attached to.
void showErrors();
// errors will be prindet to stderr
void dontShowErrors();
// errors will not be prindet to stderr
int getId();
// Returns the internal id for the
// shared memory segment.
void *getPointer();
// Returns a pointer to the shared memory
// segment. Data may be read from or written
// to the segment using this pointer.
int setUserName(char *username);
// makes this shared memory segment owned by
// the user "username"
int setGroupName(char *groupname);
// makes this shared memory segment owned by
// the group "groupname"
int setUserId(ushort uid);
// makes this shared memory segment owned by
// the user identified by uid
int setGroupId(ushort gid);
// makes this shared memory segment owned by
// the group identified by gid
int setPermissions(mode_t permissions);
// sets the access permissions for this
// shared memory segment to "permissions"
char *getUserName();
// returns the name of the user that owns this
// shared memory segment
char *getGroupName();
// returns the name of the group that owns this
// shared memory segment
ushort getUserId();
// returns the user id of the user that owns this
// shared memory segment
ushort getGroupId();
// returns the group id of the group that owns this
// shared memory segment
mode_t getPermissions();
// returns the access permissions for this
// shared memory segment
private:
#include <rudiments/private/sharedmemory.h>
};
#endif