第16章 进程间通信

16  进程间通信

一个大型的应用软件往往需要众多进程协作,进程间通信(IPC)的重要性显而易见。Linux系统下的进程通信机制基本上是从UNIX平台上的进程通信机制移植而来的。主要的进程间通信机制有以下几种。

q      无名管道(Pipe)及命名管道(Named pipe):管道可用于具有父子关系进程间的通信,命名管道用于无父子关系的进程之间通信。无父子关系的进程可将信息发送到某个命名管道中,并通过管道名读取信息。

q      信号(Signal):信号是进程间高级的通信方式,用于通知其他进程有何种事件发生。此外,进程可以向自身发送信号,还可以获得Linux内核发出的信号。Linux支持UNIX系统早期信号函数sigal(),并从BSD引入了信号函数sigaction()sigaction()函数不仅提供了更为有效的通信机制,并保持了接口的统一,已替代sigal()函数。

q      报文(Message)队列:报文队列又称为消息队列,是以PosixSystem V为标准的通信机制。报文队列克服了信号的数据结构过于简单的问题,同时也解决了管道数据流无格式和缓冲区长度受限等问题。报文队列规定了每个进程的权限,避免了仿冒信息的出现。

q      共享内存:共享内存是让多个进程访问同一个内存空间,适合于数据量极大和数据结构极为复杂的进程间通信。但这种方式牺牲了系统的安全性,所以通常与其他进程间通信形式混合使用,并避免以根用户权限执行。

q      信号量(Semaphore):信号量是用于解决进程的同步和相关资源抢占而设计的。

q      套接字(Socket):套接字是一种数据访问机制,不仅可用于进程间通信,还可用于网络通信。使用套接字最大的好处在于,Linux下的程序能快速移植到其他类UNIX平台上。很多高级的进程间通信机制以套接字为基础实现。

q      D-BusD-Bus是一种高级的进程间通信机制,以前述机制为基础实现。它提供了丰富的接口和功能,简化了程序设计难度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值