ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

Linux系统编程:POSIX共享内存

前开发者教程 2020年5月22日

在本章中,我们将学习:

1.简介

2. API’用于POSIX共享内存

3. POSIX共享内存的示例

介绍:

在上一章中,我们了解了SYS V共享内存。在本章中,我们将学习POSIX共享内存。

您需要在下面的头文件中包含使用共享内存的信息:

#包括<sys/mman.h>

使用共享内存的重要功能有:

1. mmap()

void * mmap(void * addr,size_t len,国彩网 prot,国彩网标志,国彩网 fildes,off_t off);

该功能用于寻址存储对象。

2. mprotect()

国彩网 mprotect(void * addr,size_t len,国彩网 prot);复制代码

此功能用于更改存储器保护。

3. munmap()

国彩网 munmap(void * addr,size_t len);

此功能用于取消映射先前映射的内存地址。

4. shm_open()

国彩网 shm_open(const char * name,国彩网 oflag,mode_t mode);复制代码
此功能用于打开碎片存储对象。

5. shm_unlink()

国彩网 shm_unlink(const char * name);

此功能用于删除共享内存对象。

POSIX共享内存示例:

写

#包括<stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define FILE_PATH "/my_shm_test"

国彩网 main(国彩网 argc, char *argv[])
{
	国彩网 res;
	国彩网 fd;
	国彩网 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 国彩网o 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;
}

 

读

#包括<stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define FILE_PATH "/my_shm_test"


国彩网 main(国彩网 argc, char *argv[])
{
国彩网 res;
国彩网 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 国彩网o memory
memcpy(data, addr, 256);

pr国彩网f("Read from shared memory: \"%s\"\n", data);

return 0;
}

 

 

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章

 

分享
电子邮件
鸣叫
领英
Reddit
绊倒
P国彩网erest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的

    <u id="b30Z40d" class="bbLepdf"><blockquote id="hNz0A0Q" class="hn0ZNNv"></blockquote></u>


        • <kbd id="UJX0MK2" class="UKRYosx"><option class="ZzA8Ddx"><canvas class="JWIJRum"></canvas></option></kbd>
          <nav class="qrX4PUx"><legend id="ALFXo5g"></legend></nav>