my original studying notes for readn(),writen(),and readline() function
来源:互联网 发布:oracle和mysql的优缺点 编辑:程序博客网 时间:2024/05/29 15:50
#include "unp.h"
ssize_t
readn(int fd, void *vptr, size_t n)
{
size_t nleft;
ssize_t nread;
char *ptr;
ptr = vptr; //to save vptr into nleft, that nleft can be changed, and vptr is stable
nleft = n; //to save n into nleft
while (nleft>0) {
if ( (nread = read(fd, ptr, nleft) ) < 0 { //save read() into nread
if (errno == EINTR) /* if <0, that means the procedure meets
interruption and set errno as EINTR */
nread = 0;
else
return(-1);
} else if (nread == 0) /* if =0, that means the file(fd) is read completely
or there is no byte to read from the beginning */
break;
nleft -= nread; //if nleft>0 , read the file(fd) and count nleft -= nread
ptr += nread; //for sure ptr move rightward for nread byte
}
return (n - nleft); /* at last the nleft should be 0, so we have already
read n-0=n bytes(while n is 0 or a positive integer),
or nleft is -1, we have read -1-(-1)=0 byte */
}
#include "unp.h"
ssize_t
writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr; //cuz we use writen(), we don't call it again, so it's const char
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
else
return (-1);
}
nleft -= nwritten; //nleft = nwritten- nleft
ptr += nwritten; //ptr move rightward for nwritten bytes
}
return (n); //we have written n bytes
}
#include "unp.h"
ssize_t
readline(int fd, void *vptr, size_t maxlen)
{
ssize_t n, rc;
char c, *ptr;
ptr = vptr;
for (n = 1; n < maxlen; n++) {
again:
if ( (rc = read(fd, &c, 1) ) == 1) { //if we read 1 line as the parameter sets
*ptr++ = c; /* ptr move rightward for c bytes,
and c is the string we have read in this line */
if (c == '\n') // if this line is \n
break; // we break this if
} else if (rc == 0) { /* if we read 0 line form this operate
that means all done or the file has 0 line or just fail*/
*ptr = 0; // set *ptr to NULL
return (n-1); // not we have read n-1 line
} else {
if (errno == EINTR) //errno case, return -1
return (-1);
} goto again; //goto again until n = maxlen
}
*ptr = 0 //set *ptr to NULL, just like fgets()
return(n); //we have read n lines
}
- my original studying notes for readn(),writen(),and readline() function
- readn、readline与writen
- readn,writen,readline函数
- readn, writen和readline函数
- readn,writen和readline函数
- readn writen readline函数源代码
- unix 网络编程 readn writen readline
- writen() --- readn()
- unix网络编程readn,writen,readline包裹函数
- J2EE - Notes For Studying
- readn和writen
- writen()和readn()函数
- UNIX 网络编程学习(7)--readn,writen,readline的实现
- Linux基础----------文件 IO 之 read 和 write (readn 、writen、readline)
- 为什么要这样写:readn(),writen()?
- readn和writen函数实现通信
- unix中readn()与readline 的作用,,write,,read,,readn
- function: readline
- jy-大佬作业(5)
- 求1+2+3+……+n的值。
- Qt学习笔记二
- 原型
- 01字典树+贪心(顺便总结字典树模板)
- my original studying notes for readn(),writen(),and readline() function
- 1028.联系人
- nginx代理后如何获取request的真实ip
- 贪心 HDU.OJ 2037 今年暑假不AC
- [Unity][JSON][csv][JSONUnity]csv-JSON如何在CSV文件中保存数组并读取JSON数组
- linux内核USB无线网卡、USB声卡支持
- matlab simulink 仿真时出现如下错误怎么办
- Sass
- 输出一个花样桃心