- 论坛徽章:
- 0
|
ssize_t
Readn(int fd,char *vptr,size_t n)
{
ssize_t nleft;
ssize_t nread;
char *ptr;
int i_timeout,j=0;
int t1=0;
struct sigaction act;
char s_str[13];
char bufls[1461];
FILE *fp;
fp=fopen("/tmp/test.log","w");
ptr = vptr;
nleft = n;
/*-----超时控制-----*/
act.sa_handler = sigalarm_handler;
act.sa_mask =0;
act.sa_flags=0;
/*
vptr[23+1]='\0';
*/
sigaction(SIGALRM,&act,NULL);
TimeOutFlag=0;
i_timeout=config.TimeOut;
alarm(i_timeout);
memset(vptr,'\0',sizeof(vptr));
while(nleft > 0){
t1++;
/***
read 返回值:
0:结束;
>0:返回读取的字节数;
-1:出错,errno定义出错值;
/*
memset(ptr,'\0',sizeof(ptr));
***/
nread=read(fd,vptr+(t1-1)*1460,1460);
if(t1 == 1) {strncpy(s_str,vptr,12);nleft=atoi(s_str);}
if(nread <0){
if (errno==EINTR){
if(TimeOutFlag==1) {
return E_TIMEOUT;
}
nread = 0;
}
else
return -1;
}
else if(nread == 0)
break;
nleft -= nread;
ptr += nread;
fprintf(fp,"\n [%d]vptr =[%s]nread=[%d]nleft=[%d]",strlen(vptr),vptr,nread,nleft);
}
alarm(0);
fprintf(fp,"end mptr =[%s] vptr =[%s]",ptr,vptr);
fclose(fp);
fflush(stdout);
return 0;
} |
|