Linux中传统的IPC机制

本文介绍了Linux中的进程间通信(IPC)机制,包括管道(Pipe)、Socket、共享内存和信号。管道分为无名管道和有名管道,常用于父子进程间通信,例如在Looper中的应用。Socket作为全双工通信机制,不仅应用于同一机器,也可跨机器通信。共享内存允许多个进程直接读写同一内存区域,但需同步避免数据冲突。信号则是一种异步通信方式,适合通知类型的事件传递。
摘要由CSDN通过智能技术生成

介绍

IPC全称为Inter-Process Communication,含义为进程间通信,是指两个进程之间进行数据交换的过程。IPC不是Android中所独有的,任何一个操作系统都需要有相应的IPC机制,比如Windows上可以通过剪贴板等进行进程间通信;Linux上可以通过管道(Pipe)、信号(Sinal)、信号量(Semophore)、消息队列(Message)、共享内存(Share Memory)和套接字(Socket)等来进行进程间的通信。可以看到不同的操作系统有着不同IPC机制,对于Android来说,它是一种基于Linux内核的移动操作系统,它的进程间通信方式就是Binder了,通过Binder可以轻松实现进程间的通信。本文主要介绍Linux中的IPC机制,以及相关的使用场景。

1.管道

管道是Linux有UNIX继承过来的进程间的通信机制,它是UNIX早期的一个重要通信机制,管道的主要思想是在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。这个共享文件比较特殊,他不属于文件系统并且只存在于内存中。另外管道采用半双工通信方式,数据只能在一个方向流动。管道的简单模型如下图:

在这里插入图片描述

通过简单的模型图,相信应该比较容易理解通过管道通信,传递数据,需要两次拷贝,进程A将数据拷贝至管道,进程B再从管道拷贝。

1.1管道应用场景之父子进程

管道应用场景一般在父子进程之间使用,当然如果是有名管道,只要通信的两个进程知道管道名称就可以通信了。父进程孵化克隆子进程时,就是使用的(无名)管道,通过管道将父进程的数据资源拷贝到子进程,通过调用pipe(fd)生成一对描述符,一个用来写,另一个用来读。fd[0]是用来读的,fd[1]是用来写的,通过fork()创建子进程,子进程会继承父进程的一对管道描述符。现在的需求是只是希望父进程往子进程里面写东西,那就可以把父进程的读描述符关了,子进程的写描述符关了。现在父进程往写描述符里面写入数据字符串,子进程就可以从读描述符把字符串读出来,读到buf里面,也对应了前面提到的半双工通信方式,数据只能在一个方向流动/传输,要么读,要么写,即管道一端写入数据,另一端读取数据。

int main(void) {
   
    int n,fd[2];
    char buf[SIZE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值