first commit
This commit is contained in:
parent
bc28f2819b
commit
5563867f1f
65
src/SharedMemoryAccess.cpp
Normal file
65
src/SharedMemoryAccess.cpp
Normal file
@ -0,0 +1,65 @@
|
||||
//
|
||||
// Created by Cigerxwin Chaker on 05.11.19.
|
||||
//
|
||||
#include <iostream>
|
||||
#include <sys/_types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
//#include "sharedMemory.h" /* header is important for the shmID. name could be different. maybe not needed cause: (shmget(memory_access_key, NULL, 0)) */
|
||||
#include <sys/sem.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int initSemaphore (void) {
|
||||
/* Testen, ob das Semaphor bereits existiert */
|
||||
semId = semget (semKey, 0, IPC_PRIVATE);
|
||||
if (semId < 0) {
|
||||
/* ... existiert noch nicht, also anlegen */
|
||||
/* Alle Zugriffsrechte der Dateikreierungsmaske */
|
||||
/* erlauben */
|
||||
umask(0);
|
||||
semId = semget (semKey, 1, IPC_CREAT | IPC_EXCL | PERM);
|
||||
if (semId < 0) {
|
||||
return -1;
|
||||
}
|
||||
/* Semaphor mit 1 initialisieren */
|
||||
if (semctl (semId, 0, SETVAL, (int) 1) == -1)
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int semaphoreOperation (int op) {
|
||||
semaphore.sem_op = op;
|
||||
semaphore.sem_flg = SEM_UNDO;
|
||||
if( semop (semId, &semaphore, 1) == -1) {
|
||||
perror(" semop ");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void writeToShm(char* text, int size) {
|
||||
int shmId = shmget(memoryAccessKey, NULL, 0);
|
||||
if(shmId < 0 ) {
|
||||
exit(EXIT_FAILURE);
|
||||
/* we could return -1, not sure if it will be useful to continue after there is no shm allocated for any reason*/
|
||||
} else {
|
||||
char *shm_pointer = (char *) shmat(shmId, NULL, 0);
|
||||
semaphore_operation(LOCK);
|
||||
memcpy(shm_pointer, text, size);
|
||||
semaphore_operation(UNLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
char* getShmPointer() {
|
||||
int shmId = shmget(memoryAccessKey, NULL, 0);
|
||||
if(shmId < 0) {
|
||||
exit(EXIT_FAILURE);
|
||||
/* we could return -1, not sure if it will be useful to continue after there is no shm allocated for any reason*/
|
||||
} else {
|
||||
return (char *) shmat(shmId, NULL, 0);
|
||||
}
|
||||
}
|
20
src/SharedMemoryAccess.h
Normal file
20
src/SharedMemoryAccess.h
Normal file
@ -0,0 +1,20 @@
|
||||
//
|
||||
// Created by Cigerxwin Chaker on 05.11.19.
|
||||
//
|
||||
|
||||
#ifndef LIBRARY_SHAREDMEMORYACCESSS_H
|
||||
#define LIBRARY_SHAREDMEMORYACCESSS_H
|
||||
|
||||
#define PERM 0666 /* Zugriffsrechte */
|
||||
#define LOCK -1
|
||||
#define UNLOCK 1
|
||||
#define SemKey 123458L
|
||||
|
||||
int memoryAccessKey; /* var type is int. but could be another type. */ //TODO: look after type in sharedmemory group
|
||||
int semId;
|
||||
struct sembuf semaphore;
|
||||
int initSemaphore (void);
|
||||
int semaphoreOperation (int op);
|
||||
char* getShmPointer(void);
|
||||
void writeToShm(char* text, int size);
|
||||
#endif //LIBRARY_SHAREDMEMORYACCESSS_H
|
Loading…
Reference in New Issue
Block a user