Linux 网络基础read报错返回的几种场景

6 篇文章 0 订阅
2 篇文章 0 订阅

Linux 网络基础

串行接口read报错返回的几种场景

read函数的格式
             #include <unistd.h>

            ssize_t read(int fd, void *buf, size_t count);
 
        // int fd 这是文件描述符
        // void *buf 读取文件数据存放的缓冲区
        // size_t count 读取文件的字节数
        // 若是count为0,read()可能检测到所描述的错,没有错误的情况或者read()没有检查出错误,计数为0返回0.
        // count大于SSIZE_MAX,则结果未指定
read遇到的错误场景
  • EAGAIN
    文件描述符fd指的是除套接字以外的文件 ,并将文件描述符设为非阻塞状态(O_NONBLOCK) 但是读为阻塞型。就会报错返回EAGAIN
  • EAGAIN or EWOULDBLOCK
    文件描述符fd引用一个套接字,并已经将文件描述符标记为非阻塞(O_NONBLOCK), read为阻塞型。就会报错返回EAGAIN or EWOULDBLOCK
  • EBADF
    fd并不是一个有效值,或者并没有打开读取的功能。
  • EFAULT
    buf超过了Linux 网络基础有效地址空间指向了非法的空间
  • EINTR
    准备读取数据时被一个突然而来的信号打断,导致读取错误
  • EIO
    I/O错误,其引发的原因是当前进程是后台进程组中的一个进程,当它试图从它的控制终端读取数据时,若他忽略或者阻塞了信号SIGTTIN,或者他所处的进程组是一个孤立的进程组(孤儿进程组),就会发生这种读取输入输出(I/O)流的错误。或者当从磁盘或者磁带读取时出现的低级I/O错误也可能出现这样的状况。
  • EISDIR
    文件描述符fd指向的是一个目录
  • EINVAL
    1.将文件描述符指定给不适合读取的对象;者文件使用O_DIRECT标志打开的,使得buf中指定的count确定的值与当前文件的偏移量无法对其。
    2.文件描述符的创建调用timefd_create(2),给read错误大小的缓冲区。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值