完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 michael_llh 于 2016-10-17 13:14 编辑
我们在Linux应用编程当中如果需要用到多个进程来完成一个任务的话那么我们就没有办法避开进程间通信的问题,并且进程间通信是在Linux应用编程当中比较重要的一个部分,我们需要认真的研究下这部分的内容。那么Linux早期的时候分成了两个帮派,一个是BSD,一个是System V ,而这两个帮派分别有自己的进程间通信的方式,而Linux后面的版本当中就融合了这两个帮派的所有进程间通信的方式,从而在现在我们的Linux版本中是都支持的。我们知道socket是用来网络通信的,那么早期的话就是从进程间通信演变到我们现在的网络通信上面的,其实也很好理解,socket完成的是我们电脑上面两个不同进程之间的一个通信,那么网络通信,无非就是两个不同的进程在不同的电脑上面而已。所以socket也是一种进程间通信的方式。下面我们详细看下进程间通信大致分为以下几个方面: Linux进程间通信的几种机制: (1)无名管道和有名管道 (2)system V IPC 信号量 消息队列 共享内存 (3)socket 域关键字 (4)信号 Linux IPC 机制1: 管道 一般来说我们提到的管道默认是指无名管道,原理:其实是利用内核维护的一块内存,有读端和写端,是一种单向通信,单向通信也就决定了它是一种半双工的通信方式。 使用方法:父进程创建管道之后,再使用fork创建子进程,两者之间通过管道的方式进行通信。 这里的常用函数包含:pipe,wirte,read,close 函数原型: int pipe(int pipefd[2]); 函数传入两个文件描述符,pipefd[0]是用来读取管道信息的,而pipefd[1]是用来写入管道信息的。函数的返回值int的话如果成功返回0失败的话返回-1. 下面通过代码测试无名管道,具体如下:
有名管道,顾名思义,就是有名字的管道通信,上面我们的管道通信是没有名字的,我们直接通过pipe创建了一个管道通过Linux提供的系统调用,write和read直接就可以进行写入相应的信息和读取相应的信息。但是我们的有名管道就是可以通过创建一个有名的管道文件进行通信,我们会发现管道通信和我们的文件读写是非常相似的。有名管道又称之为FIFO管道,这里我们就不写代码进行确认了。 函数原型: int mkfifo(const char *pathname, mode_t mode);
Linux IPC机制2: systemV IPC介绍: 系统通过一些专用的API来提供systemV IPC功能,分别为信号量、消息队列、共享内存。本质上也在内核里面提供一段共享内存来实现。 信号量的实质就是一个计数器,通过一个可以计数的变量,可以理解为一个int a。是一种外部资源的标示,通过该标识可以判断外部资源是否可用,信号量在这个过程中负责数据操作的互斥、同步功能。 消息队列是一种以链表的形式组织的一组数据,采访在内核当中,由各个进程通过消息队列的标识符来引用的一种数据传送方式。 共享内存从字面意义解释就是多个进程可以把一段内存映射到自己的进程空间,以此实现数据的共享以及传输,这也是进程间通信的方式中最快的一种。 信号和与关键字我们将放在后面的文章中进行讨论。 (待补充) |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4868 浏览 0 评论
87358 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4680 浏览 2 评论
3567 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2453 浏览 0 评论
1952浏览 3评论
这是i.mx6ull的关于usb的宏定义,能解释下这些宏定义的意思
1320浏览 1评论
1231浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1296浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1213浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 02:51 , Processed in 1.021110 second(s), Total 69, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号