当前位置:嗨网首页>书籍在线阅读

12-何时发送IO就绪信号

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

63.3.1 何时发送“I/O就绪”信号

现在我们针对多种文件类型考虑何时会发送“I/O就绪”信号。

终端和伪终端

对于终端和伪终端,当产生新的输入时会生成一个信号,即使之前的输入还没有被读取也是如此。如果终端上出现文件结尾的情况,此时也会发送“输入就绪”的信号(但伪终端上不会)。

对于终端来说没有“输出就绪”的信号。当终端断开连接时也不会发出信号。

从 2.4.19 版内核开始,Linux 对伪终端的从设备端提供了“输出就绪”的信号。当伪终端主设备侧读取了输入后就会产生这个信号。

管道和FIFO

对于管道或FIFO的读端,信号会在下列情况中产生。

  • 数据写入到管道中(即使已经有未读取的输入存在)。
  • 管道的写端关闭。

对于管道或FIFO的写端,信号会在下列情况中产生。

  • 对管道的读操作增加了管道中的空余空间大小,因此现在可以写入PIPE_BUF个字节而不被阻塞。
  • 管道的读端关闭。

套接字

信号驱动I/O可适用于UNIX和Internet域下的数据报套接字。信号会在下列情况中产生。

  • 一个输入数据报到达套接字(即使已经有未读取的数据报正等待读取)。
  • 套接字上发生了异步错误。

信号驱动I/O可适用于UNIX和Internet域下的流式套接字。信号会在下列情况中产生。

  • 监听套接字上接收到了新的连接。
  • TCP connect()请求完成,也就是TCP连接的主动端进入ESTABLISHED状态,如图61-5所示。对于UNIX域套接字,类似情况下是不会发出信号的。
  • 套接字上接收到了新的输入(即使已经有未读取的输入存在)。
  • 套接字对端使用shutdown()关闭了写连接(半关闭),或者通过close()完全关闭。
  • 套接字上输出就绪(例如套接字发送缓冲区中有了空间)。
  • 套接字上发生了异步错误。

inotify文件描述符

当inotify文件描述符成为可读状态时会产生一个信号——也就是由inotify文件描述符监视的其中一个文件上有事件发生时。