From 653f699dabe33b7b5b747d4cc529a1e297a4090c Mon Sep 17 00:00:00 2001 From: Sergiusz Warga Date: Wed, 21 Apr 2021 17:32:03 +0200 Subject: [PATCH] Added Task-8-1 --- Task-8/task_8_1.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Task-8/task_8_1.c diff --git a/Task-8/task_8_1.c b/Task-8/task_8_1.c new file mode 100644 index 0000000..0600035 --- /dev/null +++ b/Task-8/task_8_1.c @@ -0,0 +1,65 @@ +// man ftruncate + +// pass any message between two processes using shared memory + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + + const char *memory_name = "/memory"; + char message[] = "Hello there"; + + int fd = shm_open(memory_name, O_CREAT | O_RDWR, 0777); + if (fd < 0) { + fprintf(stderr, "shm_open: "); + exit(EXIT_FAILURE); + } + printf("Shred memory file descriptor: %d\n", fd); + + if (ftruncate(fd, sizeof(message)) < 0) { + fprintf(stderr, "ftruncate: \n"); + exit(EXIT_FAILURE); + } + + + pid_t pid; + + pid = fork(); + if (pid == -1) { + perror("fork: "); + exit(EXIT_FAILURE); + } + if (pid == 0) { + char *addr = mmap(NULL, sizeof(message), PROT_READ, MAP_SHARED, fd, 0); + printf("Value: %s\n", addr); + if (addr == MAP_FAILED) { + fprintf(stderr, "mmap: "); + exit(EXIT_FAILURE); + } + exit(EXIT_SUCCESS); + } + + char *addr = mmap(NULL, sizeof(message), PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + fprintf(stderr, "mmap: "); + exit(EXIT_FAILURE); + } + strcpy(addr, message); + + shm_unlink(memory_name); + + int status; + wait(&status); + + munmap(addr, sizeof(message)); + + return 0; +}