假设read()函数读取了10个字节的数据并存储在缓冲区中。如果unix中的read()函数被信号中断并且我重新启动读取函数,如下所示,那么下一个字节将是存储在缓冲区中,当前位置+ 1或将从缓冲区的开头写入。
int r_read(int fd, void *buf, int size)
{
while((retval=read(fd,buf,size))==-1 && errno ==EINTR);
return retval;
}
此致
答案 0 :(得分:0)
在编码后,获得EINTR
后,它会再次调用read
,buf
作为内存的起始地址来存储数据。这看起来很合适。
但是,read
在读取部分数据时可能会返回正数,在这种情况下,while()
会中断。