四网络编程-读写函数

Posted 写代码是一种艺术,甚于蒙娜丽莎的微笑!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四网络编程-读写函数相关的知识,希望对你有一定的参考价值。

1、写函数write

函数原型:

size_t write(int fd,const void *buf,size_t nbytes);

write函数将buf中的nbytes字节内容写入文件描述符fd,成功时返回写的字节数,失败时返回-1。在网络程序中,向套接字文件描述符写时有两种情况:

1)write的返回值大于0,表示写了部分或者是全部数据。

2)返回值小于0,此时出现了错误,要根据错误类型来处理。如果错误为EINTR,表示写的时候出现了中断错误;如果为EPIPE表示网络连接出现了问题(对方关闭了连接)。

可以自定义写函数来处理上面的情况:

int my_write(int fd, void *buffer, int length)
{
    int bytes_left;
    int written_bytes;
    char *ptr;

    ptr = buffer;
    bytes_left = length;
    while (bytes_left>0)
    {
        /* 开始写*/
        written_bytes = write(fd, ptr, bytes_left);
        if (written_bytes <= 0) /* 出错了*/
        {
            if (errno == EINTR) /* 中断错误 我们继续写*/
                written_bytes = 0;
            else             /* 其他错误 没有办法,只好撤退了*/
                return(-1);
        }
        bytes_left -= written_bytes;
        ptr += written_bytes;     /* 从剩下的地方继续写  */
    }
    return(0);
}

2、读函数read

函数原型:

size_t read(int fd,void *buf,size_t nbytes);

read函数是负责从fd中读取内容。当读成功时,read返回实际所读的字节数。如果返回的值是0 表示已经读到文件的结束了;小于0表示出现了错误:如果错误为EINTR说明读是由中断引起的,如果是ECONNREST表示网络连接出了问题。
可以自定义读函数来处理上面的情况:

int my_read(int fd, void *buffer, int length)
{
    int bytes_left;
    int bytes_read;
    char *ptr;

    bytes_left = length;
    while (bytes_left>0)
    {
        bytes_read = read(fd, ptr, bytes_read);
        if (bytes_read<0)
        {
            if (errno == EINTR)
                bytes_read = 0;
            else
                return(-1);
        }
        else if (bytes_read == 0)
            break;
        bytes_left -= bytes_read;
        ptr += bytes_read;
    }
    return(length - bytes_left);
}

以上是关于四网络编程-读写函数的主要内容,如果未能解决你的问题,请参考以下文章

Python编程基础13:文件读写操作

C++编程基础: 14. 文件的读写

web代码片段

C 语言文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )

C 语言文件操作 ( 配置文件读写 | 完整代码示例 ) ★

Python 文件读写操作-Python零基础入门教程