Главная » 2016 » Март » 28 » странение ошибок eintr
12:13
странение ошибок eintr
Некоторые ошибки легко устраняются. Например, если вызов readO прерываетсясигналом до того, как он успевает считать байты, то возвращается значение-1 (значение 0 можно перепутать с ситуацией EOF) и переменной errnoприсваивается значение EINTR. В таком случае можно просто повторить считывание.Действительно, существует много возможных завершений вызова readO:О вызов возвращает значение, равное len. Все len считанных байтов записаныв буфер buf. Результат допустим и ожидаем;О вызов возвращает значение, меньшее 1 еп, но большее нуля. Считанные байтызаписаны в buf. Это может происходить, когда сигнал прерывает незавершеннуюоперацию считывания, когда в середине считывания происходитошибка, когда доступно больше нуля, но меньше len байтов, когда конецфайла достигается раньше, чем удается считать 1 еп байтов. Повторение вызова(с соответствующим образом обновленными значениями buf и len) по-зволиг считать оставшиеся байты в оставшееся свободное пространство буфераили узнать нричину ошибки;О вызов возвращает значение 0. Это указывает на достижение EOF. Считыватьнечего;О вызов блокируется, потому что данные в данный момент времени недоступны.Этого не происходит в режиме без блокировки;Q вызов возвращает значение -1, а для переменной error устанавливается значениеEINTR. Это указывает на то, что сигнал был получен до того, как удалосьсчитать хотя бы один байт. Вызов можно повторить;О вызов возвращает значение -1, а для переменной error устанавливается значениеEAGAIN. Это указывает на то, что считывание было заблокировано из-заотсутствия данных, поэтому запрос нужно повторить позже. Происходиттолько в режиме без блокировки;О вызов возвращает значение -1, а переменной error присваивается значение,отличное от EINTR или EAGAIN. Это указывает на более серьезную ошибку.
Просмотров: 287 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar