一:什么是共享内存

            共享内存是属于IPC(Inter-Process Communication进程间通信)机制,其它两种是信号量和消息队列,该机制为进程开辟创建了特殊的地址范围,就像malloc分配那样。进程能够将同一段共享内存连接到自己的地址空间上。从而操作共享内存。所以说。共享内存提供了多个进程之间共享和传递数据一种方式。须要注意的是:该机制没有提供同步机制,所以我们须要採取有效的机制来同步对共享内存的訪问。

二:共享内存的原理图


    


          

三: 相关的函数

头文件:

   

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/shm.h>

创建或打开函数:

int shmget(key_t key, int size, int shmflg);

參数:第一个key是程序提供的,用于给共享内存命名。假设该命名的共享内存已经打开,则直接返回该内存标识。

            第二个sie是规定内存的大小。

            第三个是掩码合成值。包含权限值和IPC_CREAT或IPC_EXCL。比如:0600|IPC_CREAT 代表可读写而且假设该内存不存在,就创建一个。

 

返回:调用成功,返回内存标识。失败,返回-1.

连接函数:

void *shmat(int shmid, const void *shmaddr, int shmflg);

作用://映射进程和共享内存的地址空间

參数:

            第一个shmid是创建函数返回标识。

            第二个shmaddr 是共享内存在进程的地址位置。通常为NULL。让系统默认。

            第三个shmflg是位标识。通常为0

返回:调用成功,返回指向共享内存第一个字节的指针。失败,返回-1;

分离函数:

int shmdt(const void *shmaddr);//用于分离进程空间和共享内存段

返回:调用成功,返回0    失败。返回-1。

删除共享内存段函数:

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

參数:

            第一个shmid是创建函数返回标识。

            第二个cmd 是对共享内存操作。 通常为IPC_RMID  代表删除。

            第三个通常为NULL

Linux学习日志--共享内存的更多相关文章

  1. Linux学习日志——基本指令②

    文章目录 Linux学习日志--基本指令② 前言 touch cp (copy) mv (move) rm vim 输出重定向(> 或 >>) cat df(disk free) f ...

  2. Linux信号量同步共享内存实验.

    Linux信号量同步共享内存实验. Linux信号量同步共享内存实验. 简述 程序流程 信号量和共享内存的系统函数 信号量系统函数及接口 共享内存系统函数及接口 写程序 读程序 简述 本文主要内容是自 ...

  3. Linux环境进程间通信: 共享内存

    Linux环境进程间通信: 共享内存 第一部分 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间.进 ...

  4. Linux IPC之共享内存C 事例

    Linux IPC之共享内存 标签: linuxrandomnull工作 2011-08-25 11:52 4123人阅读 评论(0) 收藏 举报  分类: Linux(3)  读书札记(3)  版权 ...

  5. Linux进程间通信—使用共享内存

    Linux进程间通信-使用共享内存 转自: https://blog.csdn.net/ljianhui/article/details/10253345 下面将讲解进程间通信的另一种方式,使用共享内 ...

  6. ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)

    shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...

  7. linux 进程学习笔记-共享内存

    如果能划定一块物理内存,让多个进程都能将该内存映射到其自身虚拟内存空间的话,那么进程可以通过向这块内存空间读写数据而达到通信的目的.另外,和消息队列不同的是,共享的内存在用户空间而不是核空间,那么就不 ...

  8. linux进程间通信之共享内存学习记录

    进程 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的 ...

  9. Linux IPC POSIX 共享内存

    模型 #include <unistd.h> //for fstat() #include <sys/types.h> //for fstat() #include <s ...

随机推荐

  1. oracle char和varchar2的区别

    char的长度是固定的,varchar2长度是可以变化的.比如:存储的是“abc”,对于char(20)来说,表示你存储的占20个字节(包括17个空字符):而对于varchar2(20)来说,表示你存 ...

  2. java读取文件的基本操作

    import java.io.FileInputStream; /** * 使用FileInputStream读取文件 */ public class FileRead { /** * @param ...

  3. df du 的区别

    https://blog.csdn.net/mike8825/article/details/51986405 https://www.cnblogs.com/scl1314/p/7534894.ht ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---25

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. 阻止关闭窗口,FormCloseQuery

    procedure TfrmTopJdsMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin ) = mrNo then ...

  6. Codeforces Gym101522 A. Ambiguous Dates (La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017)

    A. Ambiguous Dates There are two popular formats for representing a date: day/month/year or month/da ...

  7. 稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853

    稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...

  8. 洛谷 P1478 陶陶摘苹果(升级版)【贪心/结构体排序/可用01背包待补】

    [链接]:https://www.luogu.org/problemnew/show/P1478 题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他 ...

  9. 搭建 Maven ---基础入门

    这篇随笔从最基础的控制台  搭建maven讲,后面再升入的讲解IDEA搭建Maven. 一,Maven是什么?作用是什么? Maven是一个项目管理工具,它包含了一个项目对象模型 (Project O ...

  10. Theam,style

    Theam <!-- Base application theme. --> <!--<style name="AppTheme" parent=" ...