aktuelle version
This commit is contained in:
parent
734d2e4f28
commit
b8773350a9
@ -1,6 +1,19 @@
|
|||||||
#include "../src/SharedMemory.h"
|
#include "../src/SharedMemory.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <iostream>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
int main() {
|
|
||||||
shared_memory_init();
|
int main(int argc, char** argv)
|
||||||
//return main();
|
{
|
||||||
|
sharedMemoryInit();
|
||||||
|
struct sigaction sigIntHandler;
|
||||||
|
sigIntHandler.sa_handler = deleteSharedMemory;
|
||||||
|
sigemptyset(&sigIntHandler.sa_mask);
|
||||||
|
sigIntHandler.sa_flags = 0;
|
||||||
|
sigaction(SIGINT, &sigIntHandler, NULL);
|
||||||
|
sleep(3); // TODO: warte auf eingabe
|
||||||
|
std::atexit(deleteSharedMemory);
|
||||||
|
return 0;
|
||||||
}
|
}
|
@ -1,39 +1,47 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstdio>
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/shm.h>
|
||||||
#include "SharedMemory.h"
|
#include "SharedMemory.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#define Max_Memory_Size 8000
|
||||||
|
|
||||||
|
int memoryAccessKey = 12345;
|
||||||
|
int memID;
|
||||||
|
|
||||||
//Shared-Memory-Segment erstellen oder öffnen – shmget()
|
//Shared-Memory-Segment erstellen oder öffnen – shmget()
|
||||||
int shared_memory_init(key_t key){
|
void sharedMemoryInit()
|
||||||
|
{
|
||||||
memory_id = shmget(key, SHMMAXSIZE, IPC_CREAT | 0666);
|
if((memID = shmget(memoryAccessKey, Max_Memory_Size, IPC_CREAT | IPC_EXCL | 0666)) < 0)
|
||||||
if(shmid == -1){
|
{
|
||||||
key++;
|
std::cerr << "Shared memory with Key: " << memoryAccessKey << " already exists. Delete by Hand before starting vKFM" << std::endl;
|
||||||
shmfnk(key);
|
exit(0);
|
||||||
return memory_id;
|
} else {
|
||||||
}
|
std::cout << "Shared memory with Key: " << memoryAccessKey << " allocated" << std::endl;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Shared-Memory-Segment id weiterreichen
|
|
||||||
int get_shared_memory_id(){
|
|
||||||
return memory_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Ein Shared-Memory-Segment abfragen, ändern oder löschen – shmctl()
|
|
||||||
void delet_shared_memory(){
|
|
||||||
memory_id = shmctl(memory_id, IPC_RMID, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Shared-Memory-Segment an einen Prozess anbinden (attach) – shmat()
|
|
||||||
void attach_process(void *myProcess){
|
|
||||||
if(( myProcess = shmat( memory_id, (char *)0, 0 )) < (char *)0 ){
|
|
||||||
perror("Fehler beim Ankoppeln des gemeinsamen Speicher Segments");
|
|
||||||
exit(-1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ein Shared-Memory-Segment loslösen – shmdt()
|
void deleteSharedMemory(int s)
|
||||||
void release_memory(){
|
{
|
||||||
int shmdt(void *myProcess);
|
if (shmctl(memID, IPC_RMID, NULL) < 0 )
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to remove shared Memory, maybe not existing: try cmd: ipcs " << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "shared Memory deleted" << std::endl;
|
||||||
}
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteSharedMemory(void)
|
||||||
|
{
|
||||||
|
if (shmctl(memID, IPC_RMID, NULL) < 0 )
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to remove shared Memory, maybe not existing: try cmd: ipcs " << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "shared Memory deleted" << std::endl;
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,30 +1,13 @@
|
|||||||
#ifndef SHARED_MEMORY_H
|
#ifndef SHARED_MEMORY_H
|
||||||
#define SHARED_MEMORY_H
|
#define SHARED_MEMORY_H
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/ipc.h>
|
|
||||||
#include <sys/shm.h>
|
|
||||||
|
|
||||||
//ID-Speicherbereich
|
//ID-Speicherbereich
|
||||||
extern int memory_id;
|
|
||||||
//Größe des Speicherbereichs hier 8MB (8000)
|
//Größe des Speicherbereichs hier 8MB (8000)
|
||||||
#define SHMMAXSIZE 8000
|
#define shmMaxSize 8000
|
||||||
key_t key 1234;
|
|
||||||
|
|
||||||
|
|
||||||
//Shared-Memory-Segment erstellen oder öffnen – shmget()
|
//Shared-Memory-Segment erstellen oder öffnen – shmget()
|
||||||
void shared_memory_init(key_t key);
|
void sharedMemoryInit();
|
||||||
|
void deleteSharedMemory(int s);
|
||||||
//Shared-Memory-Segment id weiterreichen
|
void deleteSharedMemory(void);
|
||||||
int get_shared_memory_id();
|
|
||||||
|
|
||||||
//Ein Shared-Memory-Segment abfragen, ändern oder löschen – shmctl()
|
|
||||||
void delet_shared_memory();
|
|
||||||
|
|
||||||
//Shared-Memory-Segment an einen Prozess anbinden (attach) – shmat()
|
|
||||||
void attach_process(void *myProcess);
|
|
||||||
|
|
||||||
//Ein Shared-Memory-Segment loslösen – shmdt()
|
|
||||||
void release_memory();
|
|
||||||
|
|
||||||
#endif //SHARED_MEMORY_H
|
#endif //SHARED_MEMORY_H
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
#include "../src/SharedMemory.h"
|
#include "../src/SharedMemory.h"
|
||||||
|
|
||||||
TEST_CASE("Demo test") {
|
TEST_CASE("Demo test") {
|
||||||
REQUIRE(test() == 42);
|
// REQUIRE(test() == 42);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user