`

UNP_2_Read Line Function

阅读更多
UNP Code
ssize_t Readline(int fd, void *ptr, size_t maxlen)
{
    ssize_t n;

    if ( (n = readline(fd, ptr, maxlen)) < 0)
        err_sys("readline error");  //  套头函数,多了错误信息

    return(n);
}

ssize_t readline(int fd, void *vptr, size_t maxlen)
{
    int  n, rc;
    char c, *ptr;

    ptr = vptr;
    for (n = 1; n < maxlen; n++)
    {
        if ( (rc = my_read(fd, &c)) == 1)   //  my_read相当于一个数据池的作用
        {                                   //  readline只专注于行的逻辑关系
            *ptr++ = c;
            if (c == '\n')  break;          /* newline is stored, like fgets() */
        }
        else 
        {
            if (rc == 0)     
            {
                if (n == 1) return(0);  /* EOF, no data read */
                else    break;          /* EOF, some data was read */

            } else return(-1);          /* error, errno set by read() */
        }
    }

    *ptr = 0;    /* null terminate like fgets() */
    return(n);
}

//  static function
static ssize_t my_read(int fd, char *ptr)
{
    static int     read_cnt = 0;
    static char    *read_ptr;
    static char    read_buf[MAXLINE];   //  缓存池

    if (read_cnt <= 0) 
    {
again:
        //  sizeof(read_buf) = 1 => read_cnt = 1,这里可以做缓存机制
        if ( (read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0) 
        {
            if (errno == EINTR) //  Interrupted system call
                goto again;
            return(-1); //  其它错误
        }

        if (read_cnt == 0)
            return(0);

        read_ptr = read_buf;
    }

    read_cnt--;
    *ptr = *read_ptr++;
    return(1);
}
分享到:
评论

相关推荐

    UNP_v2_CN经典图书part3part4

    UNP_v2_CN经典图书 将part1-part5全下,放到同一目录下

    nercoeus#UNP_reading_notes#27.IP选项1

    1. NOP:单字节选项,典型的用途是为某个后续选项落在 4 字节边界上进行填充 2. EOL:单字节选项,终止选项的处理 6. Record route 7.

    TCPIP协议详解卷二:实现

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    Java网络编程--Unix域协议:I/O和描述符的传递

    18.4 unp_internalize函数 218 18.5 unp_externalize函数 220 18.6 unp_discard函数 221 18.7 unp_dispose函数 222 18.8 unp_scan函数 222 18.9 unp_gc函数 223 18.10 unp_mark函数 230 18.11 性能(再讨论) 231 ...

    TCP-IP详解卷3:TCP事务协议

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    unp源码_UNIX_

    UNP 源码,建议进阶程序员使用,用处很大

    TCPIP协议详解卷三.rar

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议——高清文字(china-pub经典系列)

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议.rar

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCP-IP详解卷三

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCPIP协议详解卷3-事务协议

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    TCP-IP详解卷3.rar

    TCP-IP详解卷2_1.rar TCP-IP详解卷2_2.rar;TCP-IP详解卷3.rar 都上传了。只下第一部分不全 目 录 译者序 前言 第一部分 TCP事务协议 第1章 T/TCP概述 1 1.1 概述 1 1.2 UDP上的客户-服务器 1 1.3 TCP上的客户-...

    TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP和UNIX域协议

    17.11 PRU_CONNECT2请求和unp_connect2函数 17.12 socketpair系统调用 17.13 pipe系统调用 17.14 PRU_ACCEPT请求 17.15 PRU_DISCONNECT请求和unp_disconnect函数 17.16 PRU_SHUTDOWN请求和unp_shutdown函数 17.17 ...

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议

    17.11 PRU_CONNECT2请求和unp_connect2 函数 195 17.12 socketpair系统调用 198 17.13 pipe系统调用 202 17.14 PRU_ACCEPT请求 203 17.15 PRU_DISCONNECT请求和 unp_disconnect函数 204 17.16 PRU_SHUTDOWN请求和unp...

    Java网络编程--Unix域协议:实现

    Unix域协议:实现 17.1 概述 180 17.2 代码介绍 180 17.3 Unix domain和protosw结构 181 17.4 Unix域插口地址结构 182 17.5 Unix域协议控制块 183 17.6 uipc_usrreq函数 185 ...17.10 PRU_CONNECT请求和unp_connect

    论文研究-无线多跳网络中吞吐量优化的多播路由算法研究.pdf

    深入分析了无线多跳网络特点,并在综合考虑链路速率和多播树度对多播吞吐量影响的基础上,提出了应用于节点发射功率相同环境下的UUP_MTOA算法和应用于节点发射功率不同环境下的UNP_MTOA算法。通过仿真实验与同类近似...

    unp.rar_W. Richard Stevens_c/C++_unp

    W. Richard Stevens 的代码

    TCP/IP详解part_2

    第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口 20 2.8 最大传输单元MTU 21 2.9 路径MTU 21 2.10 串行...

Global site tag (gtag.js) - Google Analytics