正如上面的显示,,如果你想读或者写 800个字节 ,但是高速内缓存,只有400个字节的存储空间,所以你就会读取或者写不到
后面剩下的400个字节,反复的从那个未读入的字节开始读取,(其实私底下操作系统是这么干的)等高速内缓存有多余的空间
的时候,就调用realloc函数,把原先以读取的先复制过来,在开辟一段多余的空间存未读取的部分,把原来的那个末端的部分销毁掉。read和write继续重复读取的时候就可以继续读了直到读取完毕(因此要写一个包裹函数来实现重复读或者写)。
#include <unistd.h>
#include <sys/types.h>
ssize_t
readn(int fd, void *ptr, size_t n)
{
size_t nleft;
size_t nread;
char *p = ptr;
nleft = n;
while(nleft > 0){
if((nread = read(fd, p, nleft)) < 0){
if(errno == EINTR)
nread = 0;
else
return -1;
}else if(nread == 0){
break;
}
nleft -= nread;
p += nread;
}
return n-nleft;
}
write与之相似 我就不写了。忘大家喜欢