Вторник, 21.11.2017, 22:20
Приветствую Вас, Гость
Главная » 2014 » Январь » 13 » Считывание всех байтов
10:35
Считывание всех байтов

Перечисленные возможные ситуации демонстрируют, что предыдущее тривиальноеи упрощенное использование системного вызова readO не подходит,если вы хотите обрабатывать все ошибки и действительно считывать все len необходимых байтов (по крайней мере, до достижения EOF). Для реализацииправильного вызова вам необходим цикл и несколько условных операторов:ssize_t ret.while (len 0 && (ret = read (fd. buf len)) 0) if (rot — 1) if (errno == [ INTR)continue,perror ("e;read"e;),break.len - rot.buf = ret.В этом фрагменте кода обрабатываются все пять условий. Цикл считываетlen байтов, начиная с текущей позиции в файле fd, в буфер buf. Чтение файлапродолжается до тех пор, пока не считываются все len байтов или пока не достигаетсяусловие EOF. Если считывается больше нуля, но меньше len байтов,то значение len уменьшается на число полученных байтов, buf увеличивается нато же число, и вызов повторяется. Если вызов возвращает -1 и переменнаяerrorсодержит EINTR, то вызов повторяется без обновления параметров. Есливызов возвращает 1 и переменная error содержит любое другое значение, товызывается errorО, чтобы вывести в стандартной ошибке описание проблемы,и цикл прерывается.Частичное считывание не только допустимо, но и встречается довольно часто.Бессчетное количество ошибок возникает из-за того, что программисты невыполняют правильную проверку и обработку коротких запросов на считывание.Вы не должны пополнять этот список!


магазин спортингого питтания
Просмотров: 224 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: