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