Linux 网络基础
串行接口read报错返回的几种场景
read函数的格式
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
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错误大小的缓冲区。