如果进程在执行一个
低速系统调用
而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno被设置为EINTR。调用这些系统调用的程序要对这些错误的返回进行处理,典型的处理代码如下:
again:
if ((n = read(fd, buf, BUFFSIZE)) < 0)
{
if (errno == EINTR)
goto again;
}
系统调用read被中断后,程序重新调用它。
参考:
《unix环境高级编程》 P244-P246.