unix 网络编程 readn writen readline
来源:互联网 发布:1688进货淘宝卖怎么样 编辑:程序博客网 时间:2024/05/29 17:03
/* include readn */#include"unp.h"ssize_t/* Read "n" bytes from a descriptor. */readn(int fd, void *vptr, size_t n){size_tnleft;ssize_tnread;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 */elsereturn(-1);} else if (nread == 0)break;/* EOF */nleft -= nread;ptr += nread;}return(n - nleft);/* return >= 0 */}/* end readn */ssize_tReadn(int fd, void *ptr, size_t nbytes){ssize_tn;if ( (n = readn(fd, ptr, nbytes)) < 0)err_sys("readn error");return(n);}
/* include writen */#include"unp.h"ssize_t/* Write "n" bytes to a descriptor. */writen(int fd, const void *vptr, size_t n){size_tnleft;ssize_tnwritten;const char*ptr;ptr = vptr;nleft = n;while (nleft > 0) {if ( (nwritten = write(fd, ptr, nleft)) <= 0) {if (nwritten < 0 && errno == EINTR)nwritten = 0;/* and call write() again */elsereturn(-1);/* error */}nleft -= nwritten;ptr += nwritten;}return(n);}/* end writen */voidWriten(int fd, void *ptr, size_t nbytes){if (writen(fd, ptr, nbytes) != nbytes)err_sys("writen error");}
/* include readline */#include"unp.h"static intread_cnt;//刚开始可以置为一个负值(我的理解)static char*read_ptr;static charread_buf[MAXLINE];static ssize_tmy_read(int fd, char *ptr)//每次最多读取MAXLINE个字符,调用一次,每次只返回一个字符{if (read_cnt <= 0) {again:if ( (read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0) {//如果读取成功,返回read_cnt=读取的字符if (errno == EINTR)goto again;return(-1);} else if (read_cnt == 0)return(0);read_ptr = read_buf;}read_cnt--;//每次递减1,直到<0读完,才执行上面if的命令。*ptr = *read_ptr++;//每次读取一个字符,转移一个字符return(1);}ssize_treadline(int fd, void *vptr, size_t maxlen){ssize_tn, rc;charc, *ptr;ptr = vptr;for (n = 1; n < maxlen; n++) {if ( (rc = my_read(fd, &c)) == 1) {*ptr++ = c;if (c == '\n')break;/* newline is stored, like fgets() */} else if (rc == 0) {*ptr = 0;return(n - 1);/* EOF, n - 1 bytes were read */} elsereturn(-1);/* error, errno set by read() */}*ptr = 0;/* null terminate like fgets() */return(n);}ssize_treadlinebuf(void **vptrptr){if (read_cnt)*vptrptr = read_ptr;return(read_cnt);}/* end readline */ssize_tReadline(int fd, void *ptr, size_t maxlen){ssize_tn;if ( (n = readline(fd, ptr, maxlen)) < 0)err_sys("readline error");return(n);}
0 0
- unix 网络编程 readn writen readline
- unix网络编程readn,writen,readline包裹函数
- UNIX 网络编程学习(7)--readn,writen,readline的实现
- 《UNIX网络编程 卷1》 笔记: readn和writen函数
- readn、readline与writen
- readn,writen,readline函数
- readn, writen和readline函数
- readn,writen和readline函数
- readn writen readline函数源代码
- UNIX网络编程卷1:套接字联网-第3章:套接字编程-readn,writen函数
- UNIX网络编程——利用recv和readn函数实现readline函数
- writen() --- readn()
- my original studying notes for readn(),writen(),and readline() function
- unix中readn()与readline 的作用,,write,,read,,readn
- UNIX安全读写函数——readn和writen
- CRC校验和网络通信中writen、readn函数
- readn和writen函数, socket编程常用函数
- readn和writen
- 又被忽悠了,互联网创业的陷阱你遇到了吗
- unescape,decodeURI,decodeURIComponent
- 机器学习技法作业三题目16-18
- Shell命令学习(三)
- javascript还是javascript
- unix 网络编程 readn writen readline
- 解决sleep延时阻塞程序主线程,造成程序未响应问题方案
- 【JAVA】关于java中 类.class.getResource("/").getPath()获取路径有空格的问题
- 顺丰微信公众平台是如何提高用户活跃度的?
- jsp与javaBean的使用
- mysql做递归层次查询
- Android RadioButton设置选中时文字和背景颜色同时改变
- 显示 VSync信号
- java高并发,如何解决,什么方式解决