Четверг, 19.10.2017, 19:10
Приветствую Вас, Гость
Главная » 2014 » Январь » 13 » Считывание без блокировки, Компания ЭКОПРОДУКТ - www.ecoprodukt1.ru
10:34
Считывание без блокировки, Компания ЭКОПРОДУКТ - www.ecoprodukt1.ru

Иногда программистам нужно, чтобы вызов readO в случае, когда данныенедоступны, не блокировался. Они предпочитают, чтобы вызов сразу же возвращал какое-то значение, указывая, что данных для считывания нет. Это называетсявводом-выводом без блокировки (nonblocking I/O ) и позволяет приложениямвыполнять ввод-вывод, возможно, даже на нескольких файлах, вообщене блокируясь и, следовательно, не упуская доступные данные в другихфайлах.Следовательно, стоит проверять еще одно значение переменной error: EAGAIN.Как говорилось ранее, если определенный дескриптор файла открывается в режимебез блокирования (вызову openО передан флаг 0_N0NBL0CK; см. раздел«Флаги для системного вызова ореп()»), но данных для считывания нет, то вызовread() возвращает значение -1 и устанавливает для переменной error значениеEAGAIN, а не блокируется. При выполнении считывания без блокировки необходимовсегда проверять error на значение EAGAIN, чтобы не спутатьсерьезную ошибку с простым отсутствием данных. Например, можно использоватьтакой код:char buf[BUFSIZ].ssize_t nr.startnr = read (fd. buf. BUFSIZ).if (nr — 1) if (errno == EINTR)goto start: /* о. тише! */if (errno == EAGAIN)/* повторить позже */else/* ошибка */ПРИМЕЧАНИЕ Обработка значения ошибки EAGAIN в этом примере с использованием инструкции goto startв действительности несет мало смысла — можно с таким же успехом вообще не использоватьввод-вывод без блокировки. Использование режима без блокировки экономит время, но приводитк увеличению нагрузки из-за повторяющихся циклов.

Типография компании ЭКОПРОДУКТ в Москве, ВАО, вблизи метро Перово и Новогиреево. Любая полиграфическая продукция и наружная реклама. Быстро и качественно. Типография работает без выходных.
Просмотров: 206 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: