`

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书籍是网络编程领域的权威之作,由W. Richard Stevens撰写,对理解和实践网络通信有着深远的影响。这份压缩包文件包含了part3和part4两部分,意味着我们需要将part1到part5的所有部分下载并放在同一个目录下,...

    nercoeus#UNP_reading_notes#27.IP选项1

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

    unp源码_UNIX_

    "unp源码_UNIX_"这个标题暗示我们正在讨论一个与UNIX操作系统相关的开源代码库,可能是某个软件或工具的实现,其名称为UNP。在UNIX系统中,UNP可能代表"Unix Network Programming",这是一个广泛使用的术语,通常指...

    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...

    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...

    unp.rar_W. Richard Stevens_c/C++_unp

    2. "unp" - 这个文件名可能是某个程序或代码库的名称,很可能与Stevens的网络编程工作相关,它可能包含了一系列的源代码文件,用于演示和解释网络编程的各种概念和技术。 综合以上信息,这个压缩包对于想要深入学习...

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

    17.2和17.3中提及的全局变量(如图17-2所示)维护了协议的状态和资源管理,例如`unp_deferred`用于无用单元的收集,`unp_gc_int`记录是否正在执行收集,`unp_ino_t`分配给新套接字的伪i_node号,以及缓冲区大小的...

    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 串行...

    UNP 网络编程源代码

    W. Richard Stevens的原版代码,网络编程的经典巨著

Global site tag (gtag.js) - Google Analytics