![]() |
rasProject_01 / weSweetHome
R. 77 2025-03-07
process control / RasPi software by weinert-automation
|
One chunk of shared memory on a Raspberry Pi. More...
#include "weUtil.h"
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/sem.h>
#include <errno.h>
Data Structures | |
union | semCtlPar_t |
Parameter type for semctl(). More... | |
Macros | |
#define | ANZ_SEMAS |
Standard semaphore set size. More... | |
#define | PERM |
access rights | |
#define | SEMAPHORE_KEY |
Semaphore unique key "KÇÏfig25". | |
#define | SHARED_MEMORY_KEY |
Shared memory key "Buffer25". | |
#define | SHARED_MEMORY_SIZE |
Sweet home control (meterPi) shared memory size. More... | |
Functions | |
int | deleteSemas () |
Delete the one semaphore set. More... | |
int | deleteSharedMem () |
Delete and detach the shared memory. More... | |
int | detachSharedMem () |
Detach the shared memory. | |
int | getSemas () |
Get the one semaphore set. More... | |
int | initialiseSemas () |
Initialise the one semaphore set. More... | |
void * | initialiseSharedMem () |
Initialise shared memory. More... | |
int | semaphoreClt (int const semNum, int const op, semCtlPar_t par) |
Control semaphores of the set. More... | |
int | semaphoreLock (int const semNum, int ms) |
Lock one semaphore of the set. More... | |
int | semaphoreOperation (int const semNum, int const op, int ms) |
Operation on one semaphore of the set. More... | |
int | semaphoreUnlock (int const semNum) |
Unlock one semaphore of the set. More... | |
Variables | |
int | shMemErrno |
Last error number of (some ) semaphore operations. More... | |
int | shMemSem |
Semaphore set identifier. More... | |
const semCtlPar_t | VAL0 |
value 0 for SETVAL | |
const semCtlPar_t | VAL1 |
value 1 for SETVAL | |
const semCtlPar_t | VAL9 |
value 9 for SETVAL | |
One chunk of shared memory on a Raspberry Pi.
Revision history
Provide one piece of shared memory to be used by multiple programs on one Pi, e.g. one process control program range and few (cgi) programs for (human) observation and control.
#define ANZ_SEMAS |
Standard semaphore set size.
Standard semaphore set of three (3..10)
Usually three (3..10)
#define SHARED_MEMORY_SIZE |
Sweet home control (meterPi) shared memory size.
It is 1K. 512 byte would be enough, but shared memory segments will probably come as multiples of PAGE_SIZE. With meterPi (32bit Raspbian) and growPi (64bit) the values are 4096.
Get the page size by /code meterPi:~ $getconf PAGE_SIZE 4096 /endcode
int getSemas | ( | ) |
Get the one semaphore set.
The one semaphore set, if existing, will be registered and used as is.
int initialiseSemas | ( | ) |
Initialise the one semaphore set.
The number of semaphores in the set is ANZ_SEMAS (default three). The one semaphore set, if existing, will be registered and used as is. If this is not possible it will be made and initialised.
Hint: This function has two OK return values!
int semaphoreOperation | ( | int const | semNum, |
int const | op, | ||
int | ms | ||
) |
Operation on one semaphore of the set.
semNum | the semaphore number in the set (0..ANZ_SEMAS -1) |
op | the semaphore operation |
ms | if 2..20000 a timeout in ms |
int semaphoreLock | ( | int const | semNum, |
int | ms | ||
) |
Lock one semaphore of the set.
semNum | the semaphore number in the set (0..ANZ_SEMAS -1) |
ms | if 2..20000 a timeout in ms |
int semaphoreUnlock | ( | int const | semNum | ) |
Unlock one semaphore of the set.
semNum | the semaphore number in the set (0..ANZ_SEMAS -1) |
int semaphoreClt | ( | int const | semNum, |
int const | op, | ||
semCtlPar_t | par | ||
) |
Control semaphores of the set.
semNum | the semaphore number in the set (0..ANZ_SEMAS -1) |
op | the semaphore operation, like e.g. SETVAL |
par | op's parameter if any |
int deleteSemas | ( | ) |
Delete the one semaphore set.
Server operation only.
void * initialiseSharedMem | ( | ) |
Initialise shared memory.
Make or get and attach. return pointer to attached shared memory or (void *)-1
int deleteSharedMem | ( | ) |
Delete and detach the shared memory.
Server operation only.
|
extern |
Semaphore set identifier.
The value returned by e.g. semget() (within getSemas() etc.) On success, semget() returns the semaphore set identifier (a nonnegative integer). On failure, -1 is returned, and errno is set to indicate the error.
|
extern |
Last error number of (some ) semaphore operations.