管道与信号量

一、基本知识

1、管道,是特殊的文件(基于内核(内存)上创建);以前的文件是在硬盘上创建。

2、工作方向

单工:数据方向单一,广播

半双工:同一时刻只能有一个方向,对讲机

全双工:同一时刻两个方向都可以通信,电话

3、无名管道,只能用于亲缘关系 进程间

A.c B.c

| |

A B


有名管道(没有关系的进程间)

fifo(管道)先进先出

有名管道这种类型,大小为0,如果用vi 打开的化相当于是打开了一个管道。

a、是一种特殊文件

1、存在与内存中

2、在系统中 有一个对应名称(被当作文件来看)

3、看文件大小0bytes(他并不是用来保存数据的,就是一个管道,要有流动)

b、

A.c                                                                                 B.c

|                                                                                         |

A                                                                                       B

二、编程

mkfifo()创建有名管道

第一个是指定管道的名字

mode 创建的权限

返回值

成功0

失败 -1

EEXIST pathname already exists. This includes the case where pathname is a symbolic link, dangling or not

因为有时候会创建的时候输入同名,但是如果判断加他是否重名,他就会出错退出,无法继续运行,在此,我们的目的就是未来,计算重名,我们也可以继续正常运行下去。他并不是创建失败了。

在这里管道,要求双方另一端,以相对的方式打开

用remove来删除管道

总结

1、有名管道 特殊文件,但是在系统中有一个名字

2、有名管道 可以用于 任意进程间通信

3、有名通道 操作符号 前面管道操作特点

4、管道中数据 遵循fifo 的读写规则

5、管道文件都不支持定位操作 lseek fseek


三、信号

本身并不能传递大量数据

信号是一种异步的通信方式

异步:

同步:

1、说明对象一定是两个

2、接收信号的时间不一定(异步),不是说一发就能收

2、如果步调一致-----同步

不管步调不一致 ------ 异步

中断

信号也称为软中断(在软件层面上 ----- 实现一个类似中断过程)

四、编程操作

1、signal(a)

功能:

信号处理函数的注册函数(安装)函

对某一各函数设置对某个信号进行处理的函数 注册

也就是说看谁要对这个信号处理,我们就在者部署即可,表示我们要对这个信号进行处理。

参数

signum 要处理的信号的编号

//注意:不能被阻塞,处理和忽略 SIGKILL STGSTOP

handler 要对这个信号做怎么的处理 ----handler是一个函数指针,指向信号处理函数

返回值(函数指针)(函数入口地址)

成功,表示上一次设置的 信号处理函数的入口地址(也就是说是在第一次设置一个信号处理,第二次有设置另一种的信号处理,最后在第二次运行完,返回的是第一次的入口地址)

失败 返回SIG_ERR

handler 这个参数可以设置为SIG_igN,忽略这个信号

handler 这个设置SIG_DFL,默认操作

2、自己设置一个函数,这个函数,可以做想做的事情,进程不被结束。

进程的状态都是结束,也就是说遇到这个就结束了

SIGKILL 和 SIGSTOP 不能被忽略,被阻塞,这个是重点,需要记忆

SIGCHLD

相当于是自己对在终端上发射的信号进行处理,来模拟对这个信号的一个软件中断(就是将这个信号捕捉到,并对他做出反应,但是其中有操作是没有用)

如果要想让其在一个信号处理函数实现不同的功能,只需要用if语句在里面进行判断一下 

3、kill()功能一样函数

功能:通过该函数可以给pid进程发送信号

SIGNAL,不管子进程正常结束还是异常结束,都能发射信号,进行接收

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值