Diff of /SharedMemoryCLinux/myshm.c [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/SharedMemoryCLinux/myshm.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+
+struct DataExchange {
+    int i1;
+    int i2;
+};
+
+int main(int argc, char **argv)
+{
+    struct DataExchange *pRead, *pWrite;
+    char sSharedMemReadName[100] = "_CODESYS_SharedMemoryTest_Write"; 
+    char sSharedMemWriteName[100] = "_CODESYS_SharedMemoryTest_Read";
+
+    int fdRead = shm_open(sSharedMemReadName, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);
+    printf("Shared Memory Read: %s %d\n\n",sSharedMemReadName, fdRead);
+    ftruncate(fdRead, sizeof(*pRead));
+    pRead = mmap(0, sizeof(*pRead), PROT_READ | PROT_WRITE, MAP_SHARED, fdRead, 0);
+    close(fdRead);
+
+    int fdWrite = shm_open(sSharedMemWriteName, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);
+    printf("Shared Memory Write: %s %d\n\n",sSharedMemWriteName, fdWrite);
+    ftruncate(fdWrite, sizeof(*pWrite));
+    pWrite = mmap(0, sizeof(*pWrite), PROT_READ | PROT_WRITE, MAP_SHARED, fdWrite, 0);
+    close(fdWrite);
+
+    do
+    {
+        sleep(1);
+        printf("pRead->i1: %d pRead->i2: %d pWrite->i1: %d pWrite->i2: %d\n", 
+               pRead->i1, pRead->i2, pWrite->i1, pWrite->i2);
+        printf("Press 'Enter' to increment values or 'q' and then 'Enter' to quit\n");    
+        pWrite->i1++;
+        pWrite->i2--;     
+    } while (getchar() != 'q');
+
+    munmap(pRead, sizeof(*pRead));
+    shm_unlink(sSharedMemReadName);
+
+    munmap(pWrite, sizeof(*pWrite));
+    shm_unlink(sSharedMemWriteName); 
+    exit(0);
+}