0

可能重复:
Unix 系统中的文件 read() 函数

假设 read() 函数读取了 10 个字节的数据并存储在缓冲区中。现在如果 unix 中的 read() 函数被信号中断,我重新启动 read 函数,如下所示,下一个字节将存储在哪里缓冲区,当前位置+1 或将从缓冲区的开头写入。

int r_read(int fd, void *buf, int size)
{
   while((retval=read(fd,buf,size))==-1 && errno ==EINTR);
  return retval;
}  

问候

4

1 回答 1

0

正如您编码的那样,在得到EINTR它之后会read再次调用它,并buf作为内存的起始地址来存储数据。这看起来很合适。

但是,read当它读取部分数据时,可能会返回正数,在这种情况下你while()会中断。

于 2012-11-04T14:53:04.880 回答