这个书里的程序好象错了?
#include unp.hsize_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()
#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的情况,长见识了。。。
原文转自:http://www.ltesting.net
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
|