Skip to content

Commit

Permalink
Add C src for ShmCreate.dylib
Browse files Browse the repository at this point in the history
  • Loading branch information
tpietzsch committed May 15, 2024
1 parent 65ed5cf commit 48657f1
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions src/main/c/ShmCreate.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/stat.h>

// Function to get the size of a shared memory segment given its file descriptor
long get_shared_memory_size(int fd) {
struct stat shm_stat;
if (fstat(fd, &shm_stat) == -1) {
perror("fstat");
return -1;
}
return (long)shm_stat.st_size;
}

// Function to create a shared memory segment, modified to accept a long for size
int create_shared_memory(const char *name, long size) {
int fd = shm_open(name, O_CREAT | O_RDWR, 0666);
if (fd < 0) {
perror("shm_open");
return -1;
}
long already_size = get_shared_memory_size(fd);
if (already_size > 0) {
return fd;
}

if (ftruncate(fd, size) == -1) {
perror("ftruncate");
close(fd);
return -1;
}

return fd;
}

// Function to unlink a shared memory segment
void unlink_shared_memory(const char *name) {
if (shm_unlink(name) == -1) {
perror("shm_unlink");
}
}

int main() {
const char *shm_name = "/myshm";
size_t shm_size = 1024;

// Create shared memory
int shm_fd = create_shared_memory(shm_name, shm_size);
if (shm_fd < 0) {
exit(EXIT_FAILURE);
}

// Perform operations with shared memory here
// ...

// Close the shared memory file descriptor
close(shm_fd);

// Unlink shared memory
unlink_shared_memory(shm_name);

return 0;
}

0 comments on commit 48657f1

Please sign in to comment.