diff --git a/configure.ac b/configure.ac index e326d6d..3001647 100644 --- a/configure.ac +++ b/configure.ac @@ -30,9 +30,12 @@ AC_FUNC_MALLOC AC_FUNC_MMAP AC_CHECK_HEADER_STDBOOL +AC_CHECK_HEADERS([fcntl.h]) AC_CHECK_HEADERS([stddef.h]) AC_CHECK_HEADERS([stdlib.h]) AC_CHECK_HEADERS([string.h]) +AC_CHECK_HEADERS([sys/mman.h]) +AC_CHECK_HEADERS([sys/stat.h]) AC_CHECK_FUNCS([ftruncate]) AC_CHECK_FUNCS([munmap]) diff --git a/include/shmemq.h b/include/shmemq.h index fa1c38b..0b1ae70 100644 --- a/include/shmemq.h +++ b/include/shmemq.h @@ -20,6 +20,7 @@ enum Shmemq_Error { SHMEMQ_ERROR_NONE = 0, SHMEMQ_ERROR_MALLOC = 1, SHMEMQ_ERROR_INVALID_NAME = 2, + SHMEMQ_ERROR_SHARED_MEMORY = 3, }; struct Shmemq_FrameHeader { @@ -45,6 +46,7 @@ struct Shmemq_Buffer { struct Shmemq { char name[SHMEMQ_NAME_SIZE_MAX]; bool is_consumer; + int shm_id; struct Shmemq_Buffer *buffer; }; diff --git a/src/main.c b/src/main.c index 6dcb3b7..cec77f4 100644 --- a/src/main.c +++ b/src/main.c @@ -4,8 +4,11 @@ #include +#include #include #include +#include +#include struct Shmemq *shmemq_new( const char *const name, @@ -48,6 +51,14 @@ enum Shmemq_Error shmemq_init( shmemq->is_consumer = size == 0; + shmemq->shm_id = shm_open( + shmemq->name, + O_CREAT | O_RDWR, + S_IRUSR | S_IWUSR + ); + + if (shmemq->shm_id == -1) return SHMEMQ_ERROR_SHARED_MEMORY; + shmemq->buffer = NULL; return SHMEMQ_ERROR_NONE;