Linux:进程间通信方式

概述

进程通信的目的:
  1. 数据传输
  2. 共享数据
  3. 通知事件
  4. 资源共享
  5. 进程控制


进程间通信的几种方式:
  1. 管道和有名管道
  2. 信号
  3. 消息队列
  4. 共享内存
  5. 信号量
  6. 套接字

管道通信

管道的通信方式分为无名管道和有名管道,无名管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制。


特点:

  1. 管道是半双工的,数据只能向一个方向流动;需要双方通信时,建立起两个管道。
  2. 只能用于父子进程或者兄弟进程之间。
  3. 单独构成一种独立的文件系统。管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件。不属于某种文件系统,而是自立门户,单独构成一种文件系统。并且只存在于内存中。
  4. 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

建立无名管道:

#include<stdio.h>
int pipe(int filedes[2]);

建立有名管道:

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);



信号

信号本质:信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断信号是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道到底什么时候到达。

信号来源:信号事件发生有两个来源,硬件来源(比如按下键盘或其他硬件故障);软件来源,最常用发生信号的系统函数是kill,raise,alarm,setitimer及sigqueue函数,软件来源还包括一些非法运算等操作。

分类: 
(1)从可靠性方面,分为可靠信号与不可靠信号 
(2)从时间方面,可分为实时信号与非实时信号


消息队列

管道只能传送无格式字节流,能够传送的信号量有限,消息队列(也称为报文队列)则克服了 这些缺点。 
消息队列是一个消息的链表,可以把消息看作是一个记录,具有特定的格式。

消息队列的执行步骤大致如下:

1.打开、创建 
2.发送信息 
3.接受信息 
4删除消息队列


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值