ProDeveloperTutorial.com

Tutorials and Programming Solutions
Menu
  • Shell Scripting
  • System Design
  • Linux System Programming
  • 4g LTE
  • Coding questions
  • C
  • C++
  • DSA
  • GIT
  • 450 DSA Cracker
  • 5G NR
  • O-RAN

Linux System Programming: POSIX Shared Memory

prodevelopertutorial May 22, 2020

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:

C Programming 20+ ChaptersC++ Programming 80+ Chapters
100+ Solved Coding QuestionsData Structures and Algorithms 85+ Chapters
System design 20+ ChaptersShell Scripting 12 Chapters
4g LTE 60+ ChaptersMost Frequently asked Coding questions
5G NR 50+ ChaptersLinux System Programming 20+ chapters

 

Share
Email
Tweet
Linkedin
Reddit
Stumble
Pinterest
Prev Article
Next Article

About The Author

prodevelopertutorial

Follow this blog to learn more about C, C++, Linux, Competitive Programming concepts, Data Structures.

ProDeveloperTutorial.com

Tutorials and Programming Solutions
Copyright © 2022 ProDeveloperTutorial.com