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