apue上提到了低速的系统调用 解释很长很麻烦 第三版 260页
我只是简单的理解为能够发生阻塞并且阻塞时间够长且有可能永远阻塞的系统调用
当这些函数处于阻塞期,恰好捕捉到一个信号,则该系统调用返回出错,起errno设置为EINTR;
而我们希望重启这些函数则出线了这样的代码
again:
if(( n == read(fd,buf,BUFSIZE)) < 0)
{
if(errno == EINTR)
{
goto again:
}
}
然而随着时间的流失,更方便的方法出来了。那就是自启动的系统调用
包括:ioctl read readv write writev wait waitpid
因为这也许会带来问题,所以进程可以控制每个信号中断这些系统调用后,是否重启。具体方式sigaction函数用SA_INTERRUPT宏决定