#include "unp.h"
size_t /* Read "n" bytes from a descriptor */
readn(int fd,void *vptr,size_t n)
{
ssize_t nleft,nread;
char *ptr;
ptr=vptr;
nleft=n;
while(nleft >0) {
if((nread=read(fd,ptr,nleft))<0) {
if(errno==EINTR)
nread=0 ; /* and call read() again */
else
return(-1);
}else if(nread ==0 )
break; /*EOF*/
nleft -= nread;
ptr += nread ;
}
return(n-nleft); /* return >= 0 */
}
这里考虑了两种情况<0和==0,那剩下的就是>0的喽, >0的时候直接执行: nleft -= nread; ptr += nread ; else是可缺省部分
c语言中的if语句的BNF是 if (expression) if-statement [else else-statement] ;
[此帖于 04-03-27 11:05 被 henryouly 编辑].
谢谢大家,看懂了。。默认的正确的动作就是else的情况,长见识了。。。 |