linux进程间通信(IPC)的七种方式

(1)消息队列

  • 匿名管道是跟随进程的,消息队列是跟随内核的,也就是说进程结束之后,匿名管道就死了,但是消息队列还会存在(除非显示调用函数销毁)。
  • 管道是文件,存放在磁盘上,访问速度慢,消息队列是数据结构,存放在内存,访问速度快。
  • 管道是数据流式存取,消息队列是数据块式存取。

(2)匿名管道

  • 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。

  • 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);

  • 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。

  • 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

  • 当缓冲区读空或者写满时,有一定的规则控制相应的读进程或者写进程进入等待队列,当空的缓冲区有新数据写入或者满的缓冲区有数据读出来时,就唤醒等待队列中的进程继续读写。

(3)有名管道

        有名管道虽然和普通文件一样具有磁盘存放路径、文件权限和其他属性;但是,它和普通文件又有区别,有名管道并没有在磁盘中存放真正的信息,它存储的通信信息在内存中,

(4)信号量

(5)套接字

AF_UNIX也有面向流传输和面向数据包传输两种方式,类似于TCP和UDP

(6)信号

(7)共享内存

共享内存有三种方式:mmap、posix共享内存,system V(XSI)三种。

        posix共享内存:先使用shm_open()函数创造/dev/shm路径下的文件,再使用mmap将这个共享文件映射到用户进程空间便可以直接访问。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值