Главная » 2016 » Март » 28 » Считывание без блокировки
12:12
Считывание без блокировки
Иногда программистам нужно, чтобы вызов 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
Просмотров: 588 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar