首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Linux】<共享内存应用>——模拟实现不同进程把hello字符对<共享内存文件对象>的放入和取出操作

前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎!...本章主要内容面向接触过C++ Linux的老铁 主要内容含: 一.共享内存相关与相关指令 1.共享内存 共享内存(Shared Memory)是一种允许多个进程访问同一块内存空间的机制。...版本过低,加上-lrt) 注:编译时如果不通过(undefined reference), 考虑LINUX版本问题 解决: 编译后面加上-lrt gcc consumer.c -o consumer.out...-lrt 进程0:共享内存对象创建&初始化 include mman.h> include include void main(){ int...;//PROT_WRITE:页可以被写入 sprintf(ptr,"%s","Hello"); } 进程2:把hello字符从取出(模拟) include mman.h

11110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【进程间通信】mmap共享存储映射

    2. mmap函数介绍 2.1 mmap函数创建映射区 包含头文件 #include mman.h> 函数原型 void *mmap(void *addr, size_t length, int...函数参数 addr:建立映射区的首地址,由Linux内核指定,使用时直接传递NULL 。 length:想要创建的映射区的大小 。...2.2 munmap函数释放映射区 包含头文件 #include mman.h> 函数原型 int munmap(void *addr, size_t length); 函数功能 释放mmap...通过使用匿名映射可以解决这个问题,其实Linux系统给我们提供了创建匿名映射区的方法,无需依赖一个文件即可创建映射区,匿名映射的实现需要借助标志位参数flags来指定,使用MAP_ANONYMOUS (...mem); wait(NULL); } munmap(mem, 4); return 0; } 需注意的是,MAP_ANONYMOUS和MAP_ANON这两个宏是Linux

    18810

    【Linux 内核 内存管理】内存管理系统调用 ③ ( mmap 创建内存映射原理 | 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 并分配物理内存页 | mmap 库函数与内核系统调用函数 )

    创建内存映射原理 ( 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存页 ) ---- 1、分配虚拟内存页 分配 虚拟内存页 : 应用进程 调用 mmap 函数后 , 在 Linux...内存映射 “ 时 , 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ; 此处调用的 mmap 函数是 mmap 库函数 ; mmap 库函数 : #include mman.h...内核空间 的 系统调用 mmap 函数 , 实现了 " 物理内存地址 " 与 " 虚拟内存地址 " 的映射关系 ; Linux 内核中的 mmap 系统调用函数 : int mmap(struct file...mmap 库函数与 mmap 内核系统调用函数 ---- 注意区分下 用户空间 的 mmap 库函数 , 与 内核空间 的 mmap 系统调用函数 ; mmap 库函数 : #include mman.h...> void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset); Linux 内核中的 mmap 系统调用函数

    2.3K10

    【Linux 内核 内存管理】内存管理系统调用 ① ( mmap 创建内存映射 | munmap 删除内存映射 | mprotect 设置虚拟内存区域访问权限 )

    然后 , 将 指定文件 的 指定数据区间 映射到 " 用户虚拟地址空间 " 中 ; 此时 , 可以通过 指针 访问 内存的方式 , 访问文件 ; mmap 函数原型如下 : #include mman.h...对比 : 传统的文件操作 , 首先调用 fopen 函数打开文件 , 然后调用 fread fwrite 等函数操作文件 , 这些操作 在 用户模式 下调用 , 然后需要 切换到 内核模式 下调用 Linux...内存映射 “ , 进而实现了 ” 共享内存操作 " ; 二、munmap 删除内存映射 ---- munmap 系统调用 的作用是 删除内存映射 , 其函数原型如下 : #include mman.h...size_t length); 三、mprotect 设置虚拟内存区域访问权限 ---- mprotect 系统调用 的作用是 设置虚拟内存区域访问权限 , 其函数原型如下 : #include mman.h

    1.4K20

    POSIX共享内存

    在Linux中也定义了一些非标准的标志,例如MAP_ANONYMOUS(MAP_ANON),MAP_LOCKED等,具体参考Linux手册。 fd:有效的文件描述符。...如果设定了MAP_ANONYMOUS(MAP_ANON)标志,在Linux下面会忽略fd参数,而有的系统实现如BSD需要置fd为-1; offset:相对文件的起始偏移。...mmap内存映射区的大小 Linux下的内存是采用页式管理机制。通过mmap进行内存映射,内核生成的映射区的大小都是以页面大小PAGESIZE为单位,即为PAGESIZE的整数倍。...下面可以查看Linux的页面大小 #include #include int main() { std::coutLinux 2.4以后,mmap提供匿名内存映射机制,即将mmap的flags参数指定为:MAP_SHARED | MAP_ANON。这样就彻底避免了内存映射文件的创建和打开,简化了对文件的操作。

    2.9K10
    领券