mirror of https://github.com/tailix/libshmemq.git
Add functions "shmemq_delete" and "shmemq_finish"
This commit is contained in:
parent
6ddd083230
commit
158d0dd2d3
|
@ -36,5 +36,7 @@
|
|||
|
||||
/examples/raw_receiver
|
||||
/examples/raw_sender
|
||||
/tests/test_finish_consumer
|
||||
/tests/test_finish_producer
|
||||
/tests/test_init_consumer
|
||||
/tests/test_init_producer
|
||||
|
|
10
Makefile.am
10
Makefile.am
|
@ -9,6 +9,8 @@ AM_CFLAGS = \
|
|||
lib_LIBRARIES = libshmemq.a
|
||||
|
||||
TESTS = \
|
||||
tests/test_finish_consumer \
|
||||
tests/test_finish_producer \
|
||||
tests/test_init_consumer \
|
||||
tests/test_init_producer
|
||||
|
||||
|
@ -27,6 +29,14 @@ examples_raw_sender_SOURCES = \
|
|||
$(libshmemq_a_SOURCES) \
|
||||
examples/raw_sender.c
|
||||
|
||||
tests_test_finish_consumer_SOURCES = \
|
||||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_finish_consumer.c
|
||||
|
||||
tests_test_finish_producer_SOURCES = \
|
||||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_finish_producer.c
|
||||
|
||||
tests_test_init_consumer_SOURCES = \
|
||||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_init_consumer.c
|
||||
|
|
|
@ -38,6 +38,8 @@ AC_CHECK_HEADERS([sys/mman.h])
|
|||
AC_CHECK_HEADERS([sys/stat.h])
|
||||
AC_CHECK_HEADERS([unistd.h])
|
||||
|
||||
AC_CHECK_FUNCS([close])
|
||||
AC_CHECK_FUNCS([free])
|
||||
AC_CHECK_FUNCS([ftruncate])
|
||||
AC_CHECK_FUNCS([memset])
|
||||
AC_CHECK_FUNCS([munmap])
|
||||
|
|
|
@ -23,10 +23,13 @@ enum Shmemq_Error {
|
|||
|
||||
SHMEMQ_ERROR_INVALID_NAME = 1,
|
||||
|
||||
SHMEMQ_ERROR_FAILED_MALLOC = 255,
|
||||
SHMEMQ_ERROR_FAILED_SHM_OPEN = 254,
|
||||
SHMEMQ_ERROR_FAILED_FTRUNCATE = 253,
|
||||
SHMEMQ_ERROR_FAILED_MMAP = 252,
|
||||
SHMEMQ_ERROR_FAILED_MALLOC = 255,
|
||||
SHMEMQ_ERROR_FAILED_SHM_OPEN = 254,
|
||||
SHMEMQ_ERROR_FAILED_FTRUNCATE = 253,
|
||||
SHMEMQ_ERROR_FAILED_MMAP = 252,
|
||||
SHMEMQ_ERROR_FAILED_MUNMAP = 251,
|
||||
SHMEMQ_ERROR_FAILED_CLOSE = 250,
|
||||
SHMEMQ_ERROR_FAILED_SHM_UNLINK = 249,
|
||||
};
|
||||
|
||||
struct Shmemq_FrameHeader {
|
||||
|
@ -68,6 +71,10 @@ enum Shmemq_Error shmemq_init(
|
|||
bool is_consumer
|
||||
);
|
||||
|
||||
enum Shmemq_Error shmemq_delete(struct Shmemq *shmemq);
|
||||
|
||||
enum Shmemq_Error shmemq_finish(struct Shmemq *shmemq);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
26
src/main.c
26
src/main.c
|
@ -9,6 +9,32 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
enum Shmemq_Error shmemq_delete(struct Shmemq *shmemq)
|
||||
{
|
||||
const enum Shmemq_Error error = shmemq_finish(shmemq);
|
||||
free(shmemq);
|
||||
return error;
|
||||
}
|
||||
|
||||
enum Shmemq_Error shmemq_finish(struct Shmemq *shmemq)
|
||||
{
|
||||
const size_t size =
|
||||
sizeof(struct Shmemq_BufferHeader) +
|
||||
SHMEMQ_FRAME_SIZE * shmemq->buffer->header.frames_count;
|
||||
|
||||
if (munmap(shmemq->buffer, size) != 0) return SHMEMQ_ERROR_FAILED_MUNMAP;
|
||||
shmemq->buffer = NULL;
|
||||
|
||||
if (close(shmemq->shm_id) != 0) return SHMEMQ_ERROR_FAILED_CLOSE;
|
||||
shmemq->shm_id = -1;
|
||||
|
||||
if (shmemq->is_consumer && shm_unlink(shmemq->name) != 0) {
|
||||
return SHMEMQ_ERROR_FAILED_SHM_UNLINK;
|
||||
}
|
||||
|
||||
return SHMEMQ_ERROR_NONE;
|
||||
}
|
||||
|
||||
struct Shmemq *shmemq_new(
|
||||
const char *const name,
|
||||
const bool is_consumer,
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#include <shmemq.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
struct Shmemq shmemq;
|
||||
|
||||
assert(shmemq_init(&shmemq, "/foobar", true) == SHMEMQ_ERROR_NONE);
|
||||
|
||||
assert(shmemq_finish(&shmemq) == SHMEMQ_ERROR_NONE);
|
||||
|
||||
assert(shmemq.shm_id == -1);
|
||||
assert(shmemq.buffer == NULL);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
#include <shmemq.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
struct Shmemq shmemq;
|
||||
|
||||
assert(shmemq_init(&shmemq, "/foobar", false) == SHMEMQ_ERROR_NONE);
|
||||
|
||||
assert(shmemq_finish(&shmemq) == SHMEMQ_ERROR_NONE);
|
||||
|
||||
assert(shmemq.shm_id == -1);
|
||||
assert(shmemq.buffer == NULL);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue