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

Switch to unified view

a b/SharedMemoryCLinux/myshm.c
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <sys/mman.h>
4
#include <sys/stat.h>
5
#include <fcntl.h>
6
#include <string.h>
7
8
struct DataExchange {
9
    int i1;
10
    int i2;
11
};
12
13
int main(int argc, char **argv)
14
{
15
    struct DataExchange *pRead, *pWrite;
16
    char sSharedMemReadName[100] = "_CODESYS_SharedMemoryTest_Write"; 
17
    char sSharedMemWriteName[100] = "_CODESYS_SharedMemoryTest_Read";
18
19
    int fdRead = shm_open(sSharedMemReadName, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);
20
    printf("Shared Memory Read: %s %d\n\n",sSharedMemReadName, fdRead);
21
    ftruncate(fdRead, sizeof(*pRead));
22
    pRead = mmap(0, sizeof(*pRead), PROT_READ | PROT_WRITE, MAP_SHARED, fdRead, 0);
23
    close(fdRead);
24
25
    int fdWrite = shm_open(sSharedMemWriteName, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);
26
    printf("Shared Memory Write: %s %d\n\n",sSharedMemWriteName, fdWrite);
27
    ftruncate(fdWrite, sizeof(*pWrite));
28
    pWrite = mmap(0, sizeof(*pWrite), PROT_READ | PROT_WRITE, MAP_SHARED, fdWrite, 0);
29
    close(fdWrite);
30
31
    do
32
    {
33
        sleep(1);
34
        printf("pRead->i1: %d pRead->i2: %d pWrite->i1: %d pWrite->i2: %d\n", 
35
               pRead->i1, pRead->i2, pWrite->i1, pWrite->i2);
36
        printf("Press 'Enter' to increment values or 'q' and then 'Enter' to quit\n");    
37
        pWrite->i1++;
38
        pWrite->i2--;     
39
    } while (getchar() != 'q');
40
41
    munmap(pRead, sizeof(*pRead));
42
    shm_unlink(sSharedMemReadName);
43
44
    munmap(pWrite, sizeof(*pWrite));
45
    shm_unlink(sSharedMemWriteName); 
46
    exit(0);
47
}