[C++]Linux之进程间通信小结【待完善】
【此博文,待日后完善】
进程通信方式:
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之进程间通信小结【待完善】的更多相关文章
- 【转载】Linux的进程间通信-信号量
原文:Linux的进程间通信-信号量 Linux的进程间通信-信号量 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问 ...
- Linux环境进程间通信(三):消息队列
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- Linux环境进程间通信(一):管道及命名管道
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
- 浅析Linux下进程间通信:共享内存
浅析Linux下进程间通信:共享内存 共享内存允许两个或多个进程共享一给定的存储区.因为数据不需要在客户进程和服务器进程之间复制,所以它是最快的一种IPC.使用共享内存要注意的是,多个进程之间对一给定 ...
- <转>Linux环境进程间通信(二): 信号(上)
原文链接:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html 原文如下: 一.信号及信号来源 信号本质 信号是在软件层 ...
- Linux多线程编程小结
Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序 ...
- Linux 环境进程间通信(六):
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- Linux环境进程间通信(五): 共享内存(下)
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- A1119. Pre- and Post-order Traversals
Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...
- 浅谈 WebDriver如何应对不同浏览器
selenium2 基于对象的测试,在selenium2中一共支持以下浏览器: Firefox(FirefoxDriver) IE(InternetExplorerDriver) Chrome(Chr ...
- Day25--Python--re,模块(regular expression)
一 . re 1. import re findall() 查找所有结果 finditer() 查找到的结果返回迭代器 search() 查找. 如果查找到第一个结果,就停止. 如果查找不到结果,返回 ...
- JDBC调用MySQL的调用过程CallableStatement
调用过程可以当作函数理解,具体参考本人博文https://www.cnblogs.com/xixixing/p/9720261.html MySQL的test数据库中已经创建好存储过程p2(n),实现 ...
- python学习笔记--文件重命名,删除及文件夹
文件重命名 import os os.rename('123.txt','456.txt') 删除文件 >>> import os >>> os.remove('4 ...
- JavaMail发送邮箱
package utils; import java.security.GeneralSecurityException; import java.util.Properties; import ja ...
- npmrc npm配置文件
一.全局 这个文件在全局会放在/users/${yourname}/.npmrc 里面最重要的是registry,npm的源 二.项目 项目里面如果和package.json同级存放了这个.npmrc ...
- Java的一些基本术语
1. 反射 获取类本身,就叫“反射”,有以下3种方式: // 通过“实例”获取类 String str = "hello"; Class cls1 = str.getClass() ...
- 图论分支-差分约束-SPFA系统
据说差分约束有很多种,但是我学过的只有SPFA求差分: 我们知道,例如 A-B<=C,那么这就是一个差分约束. 比如说,著名的三角形差分约束,这个大家都是知道的,什么两边之差小于第三边啦,等等等 ...
- 【MSSQL】SqlServer中delete语句表别名的问题
1.一般情况下删除表数据的sql语句: delete from products 2.如果想给表起个别名再删除呢,就得像下面这样写了 delete products from products as ...