重读APUE(10)-中断的系统调用

如果进程在执行一个低速系统调用而阻塞期间捕获到一个信号,则该系统调用就会被中断而不再继续执行;该系统调用返回出错,其errno设置为EINTR;

系统将系统调用分成两类:低速系统调用和其他系统调用;低速系统调用是可能会使进程永远阻塞的一类系统调用,包括:

1. 如果某类型文件(如读管道,终端设备,网络设备等)的数据不存在,则读操作可能会使调用者永远阻塞;

2. 如果数据不能被相同类型的文件立即接受,则写操作可能会使调用者永远阻塞;

3. 在某种条件发生之前打开某些类型文件,可能会发生阻塞(如要打开一个终端设备,需要先等待与之连接的调制解调器应答);

4. pause函数和wait函数;

5. 某些ioctl操作;

6. 某些进程通信函数;

在编写代码的时候一个典型的实例如下:当read被信号打断的时候,即errno=EINTR,此时重新调用read继续读取数据;

 

本文链接:重读APUE(10)-中断的系统调用

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注