内存映射mmap拓展

简介: 内存映射mmap拓展

第一个是上一篇博客中用mmap实现任意两个进程间相互通信,前几篇博客也用管道实现了进程间通信

这里有个问题,管道是基于缓冲区环形队列的,实验也表明读过的数据不能在读利用命名管道实现任意进程间的通信

那么mmap多个读写操作时会是什么情况呢?

一写多读

多写一读

这里代码要改变一下

mmap_w.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <errno.h>
 
struct student {
   int id;
   int age;
   char name[256];
};
 
void sys_err(const char *str){
    perror(str);
    exit(1);
}
 
int main(int argc,char *argv){
   struct student stu={1,23,"xiaoming"};
   struct student *p;
   int fd;
 
  //fd=open("test_map",O_RDWR|O_CREAT|O_TRUNC,0664);
   fd=open("test_map",O_RDWR);
   if(fd==-1)sys_err("open error");
 
   ftruncate(fd,sizeof(stu));
   p=mmap(NULL,sizeof(stu),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
   if(p==MAP_FAILED)sys_err("mmap error");
   close(fd);
   while(1){
        memcpy(p,&stu,sizeof(stu));
        stu.id++;
        sleep(2);
   }
   munmap(p,sizeof(stu));
   return 0;
}

mmap_r.c不变,可以看前一篇文章

相关文章
|
2月前
|
存储 缓存 Linux
用户态内存映射
【9月更文挑战第20天】内存映射不仅包括物理与虚拟内存间的映射,还涉及将文件内容映射至虚拟内存,使得访问内存即可获取文件数据。mmap 系统调用支持将文件或匿名内存映射到进程的虚拟内存空间,通过多级页表机制实现高效地址转换,并利用 TLB 加速映射过程。TLB 作为页表缓存,存储频繁访问的页表项,显著提升了地址转换速度。
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
42 0
|
2月前
|
存储 安全 Linux
将文件映射到内存,像数组一样访问
将文件映射到内存,像数组一样访问
29 0
|
2月前
|
消息中间件 Linux 容器
共享内存的创建和映射过程
【9月更文挑战第1天】消息队列、共享内存及信号量在使用前需生成key并获取唯一ID,均通过`xxxget`函数实现。
|
5月前
|
监控 Linux
深入了解Linux的pmap命令:进程内存映射的利器
`pmap`是Linux下分析进程内存映射的工具,显示内存区域、权限、大小等信息。通过`/proc/[pid]/maps`获取数据,特点包括详细、实时和灵活。参数如`-x`显示扩展信息,`-d`显示设备。示例:`pmap -x 1234`查看进程1234的映射。注意权限、实时性和准确性。结合其他工具定期监控,排查内存问题。
|
5月前
|
C++
C++对C的改进和拓展\动态内存空间管理
C++对C的改进和拓展\动态内存空间管理
24 0
|
6月前
内存映射实现无血缘关系进程间通信
内存映射实现无血缘关系进程间通信
|
6月前
内存映射实现父子进程通信
内存映射实现父子进程通信
|
6月前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第30天】 在现代操作系统中,内存管理是一个复杂而关键的功能。它不仅确保了系统资源的有效利用,还为每个运行的程序提供了独立的地址空间,保障了程序之间的隔离性和安全性。本文将探讨操作系统如何通过分页机制和虚拟内存技术实现内存的抽象化,以及这些技术是如何影响应用程序性能的。我们将详细解析虚拟地址到物理地址的转换过程,并讨论操作系统在此过程中扮演的角色。文章的目的是为读者提供一个清晰的框架,以便更好地理解内存管理的工作原理及其对系统稳定性和效率的影响。
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
339 0