readn,writen和readline函数
来源:互联网 发布:如何判断协议数据单元 编辑:程序博客网 时间:2024/06/08 08:02
readn函数:从一个描述符读n字节
#include "unp.h"
ssize_t readn(int fd, void* vptr, size_t n)
{
size_t nleft;
ssize_t nread;
char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0)
{
if ((nread = read(fd, ptr, nleft)) < 0)
{
if (errno == EINTR)
nread = 0;
else
return(-1);
}
else if (nread == 0)
break;
nleft -= nread;
ptr += nread;
}
return (n - nleft);
}
writen函数:往一个描述符写n字节
#include "unp.h"
ssize_t writen(int fd, const void* vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0)
{
if (nwritten = write(fd, ptr, nleft) <= 0)
{
if (nwritten < 0 && errno == EINTR)
nwritten = 0;
else
return (-1);
}
nleft -= nwritten;
ptr += nwritten;
}
return (n);
}
readline函数:从一个描述符读文本行,一次1个字节(极端的慢)
#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)
{
*ptr++ = c;
if (c == '\n')
break; //newline is stored ,like fgets()
}
else if (rc == 0)
{
*ptr = 0;
return(n - 1);
}
else{
if (errno == EINTR)
goto again;
return (-1);
}
}
*ptr = 0;//null terminate like fgets()
return (n);
}
readine的改进:
static ssize_t my_read(in fd, char* ptr)
{
if (read_cnt <= 0)
{
again:
if ((read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0)
{
if (errno == EINTR)
goto again;
return (-1);
}
else if (read_cnt == 0)
return (0);
read_ptr = read_buf;
}
read_cnt--;
*ptr = *read_ptr++;
return(1);
}
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++)
{
if (rc = my_read(fd, &c) == 1)
{
*ptr++ = c;
if (c == '\n')
break;
}
else if (rc == 0)
{
*ptr = 0;
return (n - 1);
}
else
return (-1);
}
*ptr = 0;
return (n);
}
ssize_t readlinebuf(void**vptrptr)
{
if (read_cnt)
*vptrptr = read_ptr;
return (read_cnt);
}
- readn, writen和readline函数
- readn,writen和readline函数
- readn,writen,readline函数
- readn writen readline函数源代码
- writen()和readn()函数
- readn、readline与writen
- unix网络编程readn,writen,readline包裹函数
- readn和writen函数实现通信
- readn和writen
- unix 网络编程 readn writen readline
- readn和writen函数, socket编程常用函数
- UNIX安全读写函数——readn和writen
- 高级I/O之readn和writen函数
- CRC校验和网络通信中writen、readn函数
- 《UNIX网络编程 卷1》 笔记: readn和writen函数
- Linux基础----------文件 IO 之 read 和 write (readn 、writen、readline)
- writen() --- readn()
- my original studying notes for readn(),writen(),and readline() function
- RedHat下如何安装和使用KVM
- 在线工具整理
- 解决PHP中使用header输出头报错问题
- sevlet生命周期,工作原理
- 论技术文档规范的的两种开发流程
- readn,writen和readline函数
- webapp 重启自身
- load 与get 在hibernate中的区别
- 区间dp讲解之石子合并问题 区间dp的分析方法
- Windows/Linux下Oracle监听日志过大无需重启数据库服务的处理方法
- Java -Dfile.encoding=UTF-8 遭遇乱码
- 面试与被面试总结
- 后Hadoop时代的大数据架构
- 虚拟化技术