In this chapter we shall learn about:
1. Introduction
2. API’s used in POSIX Shared Memory
3. Example for POSIX Shared Memory
Introduction:
In the previous chapter we learned about SYS V Shared Memory. In this chapter we shall learn about POSIX Shared Memory.
You need to include below header file for using Shared Memory:
#include <sys/mman.h>
Important functions for using shared memory are:
1. mmap()
void *mmap( void *addr, size_t len, int prot, int flags, int fildes, off_t off );
This function is used to address a memory object.
2. mprotect()
int mprotect( void *addr, size_t len, int prot );
This function is used to change memory protection.
3. munmap()
int munmap( void *addr, size_t len );
This function is used to unmap the memory address that is previously mapped.
4. shm_open()
int shm_open( const char *name, int oflag, mode_t mode );
This function is used to open a shred memory object.
5. shm_unlink()
int shm_unlink( const char *name );
This function is used to remove a shared memory object.
Example for POSIX Shared Memory:
write.c
#include <stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define FILE_PATH "/my_shm_test" int main(int argc, char *argv[]) { int res; int fd; int len; void *addr; char data[256] = "Hello World"; // get shared memory file descriptor fd = shm_open(FILE_PATH, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); // increase the size res = ftruncate(fd, 256); // map shared memory addr = mmap(NULL, 256, PROT_WRITE, MAP_SHARED, fd, 0); // place data into memory len = strlen(data) + 1; memcpy(addr, data, len); sleep(2); // mmap cleanup res = munmap(addr, 256); // shm_open cleanup fd = shm_unlink(FILE_PATH); return 0; }
read.c
#include <stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define FILE_PATH "/my_shm_test" int main(int argc, char *argv[]) { int res; int fd; char data[256]; void *addr; // get shared memory file descriptor fd = shm_open(FILE_PATH, O_RDONLY, S_IRUSR | S_IWUSR); if (fd == -1) { perror("open"); return 10; } // map shared memory addr = mmap(NULL, 256, PROT_READ, MAP_SHARED, fd, 0); // place data into memory memcpy(data, addr, 256); printf("Read from shared memory: \"%s\"\n", data); return 0; }
List Of Tutorials available in this website: