first commit

This commit is contained in:
Cigerxwin Chaker 2019-11-06 11:05:11 +01:00
parent bc28f2819b
commit 5563867f1f
2 changed files with 85 additions and 0 deletions

View 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
View 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