Системный вызов read() возвращает -1, если при чтении файла произошла ошибка, а переменная errno устанавливается в соответствующий код ошибки. 35
Некоторые возможные ошибки и их описание:
- EAGAIN или EWOULDBLOCK. 5 Файловый дескриптор указывает на сокет, помеченный как неблокирующий (O_NONBLOCK), а чтение вызвало бы блокировку. 5
- EBADF. 5 Файловый дескриптор не является допустимым или не открыт на чтение. 5
- EFAULT. 5 Буфер находится за пределами доступного адресного пространства. 5
- EINTR. 5 Вызов был прерван сигналом до того, как были прочитаны данные. 5
- EINVAL. 5 Файловый дескриптор связан с объектом, не приспособленным для чтения, или файл был открыт с использованием флага O_DIRECT, и адрес, указанный в буфере, значение, указанное в count или текущее смещение в файле, имеет недопустимое выравнивание. 5
- EIO. 5 Ошибка ввода/вывода. 5
Если количество прочитанных байт меньше, чем количество запрошенных, то это не считается ошибкой. 5 Например, это могло произойти из-за того, что позиция ближе к концу файла, или потому что выполняется чтение из канала или терминала, или потому что работа read() была прервана сигналом. 5