通信方式:(1)单工://广播;单一方向的数据通道;
(2)半双工://对讲机;同一时刻只能有一个方向;
(3)全双工://手机电话;同一时刻两个方向都可以通信。
管道一般多为半双工;无名管道只能用于亲缘关系进程间。有名管道可以实现两个不相关的进程间通信。管道文件都不支持定位操作。
一、有名管道
1、定义:
是一种(内核/内存中)特殊的文件。<系统层面有名字>
2、特点:
(1)存在于内存中;(2)在系统中有一个对应名称;(3)看文件大小 0 bytes。
3、创建
int mkfifo(conse char *pathname(管道路径+名称),mode_t mode(权限))
4、删除
int remove(const char *pathname)
二、信号
1、定义
信号是一种异步的通信方式;本身并不能传递大量数据。
也称软中断;<软件层面上实现一个类似中断的过程>
2、同步、异步
(1)说明对象一定是两个;
(2)如果步调一致——同步;如果步调不一致——异步。
3、编程
(1)signal
sighandler_t signal(int signum(要处理的信号编号) , sighandler_t handler(具体处理))
功能:信号处理函数的注册函数。
返回值:成功——返回处理前函数入口地址;
失败——SIG_ERR.
(2)sighandler_t类型
实质上是typedef void (*sighandler_t)(int(表示捕获到的信号编号)) 函数指针<指向信号处理函数>
handler参数可以是:SIG_IGN 忽略;SIG_DFL 默认。
(3)kill
int kill(pid_t pid(进程pid) , int sig(信号编号))
功能:发送一个信号给一个进程。
注意:不能被阻塞、处理和忽略的信号有:SIGKILL 、SIGSTOP。
常用信号: