【此博文,待日后完善】

进程通信方式:

  1.管道通信(匿名管道/命名管道)

  2.消息队列

  3.共享内存

  4.信号量

  

1.管道通信

无名管道用于具有亲缘关系进程间的通信
管道是半双工的,数据只能单向流动(双方通信需建立两个管道)
管道只能用于父子进程或兄弟进程之间
管道对于管道两端的进程而言就是一个文件,并单独构成一种文件系统,存在于内存中
写管道的内容添加在管道缓冲区的末尾,读管道则从缓冲区头部读出

有名管道在普通管道具备功能基础上,通过给管道命名的方法变成管道文件,允许无亲缘关系进程间通过访问管道文件进行通信

2.消息队列

也叫报文队列,是消息的链接表
有两种类型的消息队列:POSIX消息队列和系统V消息队列
运行于同一台机器上的进程间通信,与管道类似
可以用流管道或套接口方式取代
系统V消息队列
int msgget( ); 创建一个新队列或打开一个存在的队列
int msgsnd( ); 把消息添加到msgid代表的消息队列的末尾,消息的大小由msgsz指定。
int msgrcv( ); 从msgid代表的消息队列中取走一个消息。
int msgctl( ); 在由msgid标识的消息队列上执行cmd指定的操作。

3.共享内存

将同一块内存区映射到共享它的不同进程的地址空间中
效率高:进程可以直接读写内存,不需任何数据拷贝,避免了内核空间与用户空间的切换
内核未对共享内存的访问提供同步机制,需要依靠某种同步机制来同步对共享进程的访问
POSIX共享内存
通过用户空间挂载的tmpfs文件系统实现,持久化的
API:shm_open( )、mmap( )、munmap( )、shm_unlink( )等
System V共享内存
由内核本身的tmpfs实现,非持久化的
API:shmget( )、shmat( )、shmdt( )、shmctl( )等

4.信号量

也称信号灯,用来协调不同进程间的数据对象
提供对进程间共享资源访问控制的手段,用来保护共享资源
还可用于进程间及同一进程不同线程间的进程同步
两种类型
二值信号灯:取值只能为0或1,类似于互斥锁
计算信号灯:取值可以为任意非负值(受内核本身约束)
POSIX信号量和System V信号量(与共享内存的两种方式类似)

5.参考文献:

  [Linux进程间通信——使用命名管道](http://blog.csdn.net/ljianhui/article/details/10202699) 【命名管道讲解得非常有条理性】

[C++]Linux之进程间通信小结【待完善】的更多相关文章

  1. 【转载】Linux的进程间通信-信号量

    原文:Linux的进程间通信-信号量 Linux的进程间通信-信号量 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问 ...

  2. Linux环境进程间通信(三):消息队列

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  3. Linux环境进程间通信(一):管道及命名管道

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  4. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  5. 浅析Linux下进程间通信:共享内存

    浅析Linux下进程间通信:共享内存 共享内存允许两个或多个进程共享一给定的存储区.因为数据不需要在客户进程和服务器进程之间复制,所以它是最快的一种IPC.使用共享内存要注意的是,多个进程之间对一给定 ...

  6. <转>Linux环境进程间通信(二): 信号(上)

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html 原文如下: 一.信号及信号来源 信号本质 信号是在软件层 ...

  7. Linux多线程编程小结

     Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序 ...

  8. Linux 环境进程间通信(六):

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  9. Linux环境进程间通信(五): 共享内存(下)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

随机推荐

  1. Hadoop安装错误总结

    Master的NodeManager/DateNode未启动 日志中未出现任何错误 正常现象,如需在Master中启动可在slave文件中 slaves localhost slave01 slave ...

  2. django 配置media 存放调用 图片、图标等文件

    一.需求分析: 一般在网站开发中,有很多类似于用户头像.用户上传的文件,这些经常要改变的媒体文件,需要有一个地方存放,于是就需要media目录,起到跟static类似的功能. 二.在settings. ...

  3. [LNOI2014]LCA(树链剖分+线段树)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3626 题解:看到LCA,我们可以直接想到这题的正解不是LCA!(LCA只能得20分,还要 ...

  4. django基于存储在前端的token用户认证

    一.前提 首先是这个代码基于前后端分离的API,我们用了django的framework模块,帮助我们快速的编写restful规则的接口 前端token原理: 把(token=加密后的字符串,key= ...

  5. 整合shiro出现【Correct the classpath of your application so that it contains a single, compatible version of org.quartz.Scheduler】

    跑的时候出现错误: Description: An attempt was made to call the method org.quartz.Scheduler.getListenerManage ...

  6. VUE通过id从列表页跳转到相对的详情页

    新闻列表页面: 在这里我用a标签进行跳转,在vue里面可以这样写<router-link></router-link> 1 <router-link :to=" ...

  7. HDU 1079 Calendar Game (博弈)

    Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. Linux 上 nginx配置

    1:安装工具包 wget.vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc g ...

  9. HTML学习笔记Day7

    一.position定位属性,检索对象的定位方式 1.语法:{position:static(无特殊定位)/absolute(绝对定位)/relative(相对定位)/fixed(固定定位):} 1) ...

  10. (01背包 dp)P1049 装箱问题 洛谷

    题目描述 有一个箱子容量为VV(正整数,0≤V≤20000),同时有nn个物品(0<n≤30,每个物品有一个体积(正整数). 要求nn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入 ...