diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2025-11-02 15:46:50 -0500 |
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2025-11-14 10:30:53 -0500 |
| commit | 6026cc027599ff8e0ffa1af1bb3f71f551b08ab7 (patch) | |
| tree | 7f7f1ee37422c51779b58efdc24fa950f21f6ee9 /src/lib | |
| parent | cf50be9ef96fd8011fbd45321b4c454470112cf4 (diff) | |
| download | stasis-6026cc027599ff8e0ffa1af1bb3f71f551b08ab7.tar.gz | |
Add semaphore wrapper
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/core/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/lib/core/include/sem.h | 17 | ||||
| -rw-r--r-- | src/lib/core/semaphore.c | 26 |
3 files changed, 44 insertions, 0 deletions
diff --git a/src/lib/core/CMakeLists.txt b/src/lib/core/CMakeLists.txt index e3e3d4b..7b33cf9 100644 --- a/src/lib/core/CMakeLists.txt +++ b/src/lib/core/CMakeLists.txt @@ -21,6 +21,7 @@ add_library(stasis_core STATIC template_func_proto.c envctl.c multiprocessing.c + semaphore.c ) target_include_directories(stasis_core PRIVATE ${core_INCLUDE} diff --git a/src/lib/core/include/sem.h b/src/lib/core/include/sem.h new file mode 100644 index 0000000..868f33d --- /dev/null +++ b/src/lib/core/include/sem.h @@ -0,0 +1,17 @@ +#ifndef STASIS_SEMAPHORE_H +#define STASIS_SEMAPHORE_H + +#include <semaphore.h> + +struct Semaphore { + sem_t *sem; + char name[255]; +}; + +int semaphore_init(struct Semaphore *s, const char *name, int value); +int semaphore_wait(struct Semaphore *s); +int semaphore_post(struct Semaphore *s); + +void semaphore_destroy(struct Semaphore *s); + +#endif //STASIS_SEMAPHORE_H
\ No newline at end of file diff --git a/src/lib/core/semaphore.c b/src/lib/core/semaphore.c new file mode 100644 index 0000000..9ea4c9c --- /dev/null +++ b/src/lib/core/semaphore.c @@ -0,0 +1,26 @@ +#include <stdio.h> +#include <fcntl.h> +#include "sem.h" + +int semaphore_init(struct Semaphore *s, const char *name, const int value) { + snprintf(s->name, sizeof(s->name), "/%s", name); + s->sem = sem_open(s->name, O_CREAT, 0644, value); + if (s->sem == SEM_FAILED) { + perror("sem_open"); + return -1; + } + return 0; +} + +int semaphore_wait(struct Semaphore *s) { + return sem_wait(s->sem); +} + +int semaphore_post(struct Semaphore *s) { + return sem_post(s->sem); +} + +void semaphore_destroy(struct Semaphore *s) { + sem_close(s->sem); + sem_unlink(s->name); +} |
