管道的应用:
一”应用于shell中
管道可用于输入输出重定向,将一个命令的输出直接定向到另一命令的输入
二:
用于具有亲缘关系的进程间的通信
管道通信的局限性:
管道的主要局限性体现在:
- 只支持单向数据流;
- 只能用于具有亲缘关系的进程之间;
- 没有名字;
- 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);
- 管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;
二:命名管道(FIFO)(一段共享空间此空间被命名了,并被定义为类文件的形式可以向操作文件一样操作)
命名管道有名字解决:
- 命名管道关联的一个路径名(以FIFO文件的形式存在与文件系统中),通过访问该路径实现不存在亲缘关系的进程间通信
- 命名管道遵循先进先出,对管道及FIFO的读总是从开始返回数据,写添加到末尾不支持lseek(FIFO相当于一个共享的文件,通过两个进程之间都可以实现对此文件的访问且此共享空间中的访问顺序是遵循先进先出的队列形式)
三:消息队列(把一块块的共享内存一链表的形式链接起来)
见另一文的详解
四:信号
信号即是是一个中断
类比CPU收到中断请求,进程收到信号请求
信号是进程通信间唯一的异步通信机制,
主要是提供通知
信号量来源:
1:硬件来源(硬中断)2.软件来源常用的发送信号量的系统函数kill,rasie,alarm和setitimer以及sigqueue函数,软中断来源还包括一些非法操作
信号种类:
可靠性方面:可靠信号和不可靠信号
时间关系:实时信号和非实时信号
不可靠信号:
建立于早期机制上的信号叫做“不可靠信号”,信号值下雨SIGRTMIN
主要问题:
进程每次处理信号后,就会对信号的相应设置为默认动作。在某种情况下,将导致对信号的错误处理。因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾在意此调用signal,重新安装这个信号
信号可能丢失
Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,Linux下的不可靠信号问题主要指的是信号可能丢失。