Синтаксис:
анкета int (struct pollfd * ufds, неподписан int nfds, int timeout);Аргументът „fds“ определя дескрипторите на документите, които трябва да бъдат проверени, както и инцидентите от значение за всеки. Това е препратка към масив, който има по един елемент за всеки дескриптор на отворен документ. Елементите на масива са структури pollfd, където fd означава дескриптор на отворен документ и всички събития и повторни събития, обикновено наричани битови маски, се генерират чрез създаване на обединяване на съответните флагове на събитията:
ПОЛЛИН:
Освен данните с висок приоритет, информационните данни могат да бъдат прочетени, без дори да бъдат блокирани. Също така, ако съобщението за отговор е с нулеви размери, този флаг сигнал се генерира за СТРИМОВИТЕ в събития. Този флаг има същото значение като POLLRDNORM | POLLRDBAND.
POLLRDNORM:
Без прекъсване могат да се отчитат обикновени информационни данни. Информация за основната приоритетна обхватна лента 0 може да се прочете въпреки прекъсването за STREAMS. И ако съобщението за отговор е с нулева дължина, този сигнал се генерира при повторни събития.
POLLRDBAND:
Данните за основната загриженост ще бъдат прочетени, въпреки че причиняват закъснения. Информация за диапазоните на приоритетите, по-големи от нула, може да бъде прочетена въпреки намесата в STREAMS. И ако отговорът на съобщението е с нулева продължителност, този сигнал се разпространява в ревенти.
POLLPRI:
Възможно е да има някои изключения от дескриптора на документа. Информация с най-висок приоритет може да бъде прочетена, без да бъде блокирана. Също така, ако отговорът е с нулева продължителност, този сигнал се разпространява за STREAMS в ревенти.
ЗАГЛЪСВАНЕ:
Потребителите могат да изписват с помощта на флага POLLOUT. Лишени от спиране, типичните данни могат да бъдат записани. Информация за предпочитания обхват 0 може да бъде записана въпреки прекъсването в STREAMS.
ANNEX:
Той работи по същия начин като POLLOUT.
ГРАНИЦА
Данните с най-голям приоритет ще бъдат записани с помощта на този флаг. Информация за диапазоните на предпочитанията, по-големи от нула за STREAMS, може да бъде записана, без да бъде блокирана. Тази дейност оценява само обхвати, в които вече е записан минимум веднъж, тъй като на този STREAM не е записан обхват на предпочитанията.
ПОЛЕРЕР:
Това е състояние на грешка и възниква само когато системата или потокът са срещнали проблем. Този символ се отнася само за битова маска за избягване; през целия участник в дейностите той се пренебрегва.
POLLHUP:
Той определя състоянието на прекъсване и се появява само когато връзката със системата е деактивирана. Тази поява и POLLOUT са еднакво съвместими; след като възникне проблем, потокът никога няма да бъде написан.
POLLNVAL:
Това определя невалидната или необичайна заявка. Тази дейност обаче не изключва участието в POLLIN, POLLRDNORM, POLLRDBAND или POLLPRI. Този символ се отнася само за битова маска за избягване; той се пренебрегва при участника в събитието.
Пример за системно обаждане на анкета:
Той изпълнява същата роля като select (), макар и в по-голям мащаб. Anketa () е достъпна на всяка Linux базирана на Glibc машина. По-старите ядра имитират poll () с select () в C библиотеката. Програмите обаче не трябва да правят разлика. Ето пример за това как се чувства anketa (). Затова първо отворете терминала на командния ред, като използвате клавишната комбинация „Ctrl + Alt + T.”След отварянето му трябва да създадем файл от тип С, за да напишем код от него от тип. За това използваме нано редактора. Така че, изпробвайте командата по-долу nano в терминала заедно с името на C файла.
$ nano ново.° С
Сега е отворен нано редакторът за C файла „нов“. Първо трябва да включите някои библиотеки в него, особено „анкетата.h ”библиотека. Основната функция е посочена като имаща цялостен тип връщане с два аргумента в параметъра си, напр.ж., argc и argv. След това сме декларирали дескриптор на файл fd и масив от символни типове с име „buf.”След това е дефинирана променлива на типа структура, наречена pollfd pfds с размер 2. След това е обявено отворено системно повикване, за да се получи стойността от масива от тип символи и да се присвои на файловия дескриптор „fd“, както се вижда на изображението. Докато дескрипторът на файла е „1“, структурата „pfds“ ще бъде актуализирана с някои данни в него, използвайки флага POLLIN в него. Сега дефинирахме функция за системно повикване poll (). Първият параметър на системното повикване poll () е ufds структурата, използвана в кода. Вторият параметър определя общия брой структури на pollfd в серията fds.
И последният параметър показва стойността на времето за изчакване на цяло число за системното извикване на анкетата. Ако pfds са събития и са добавени със стойност 0, тогава системното повикване за четене ще прочете данните от буфера. Операторът „if“ ще се използва за проверка дали операторът за четене е върнал стойността си на цяло число и записва данни. Ако структурата „pfds“ е в позиция „1“, докато извлича и въвежда данните, системното повикване за четене ще използва данните от буфер, докато използва дескриптора „fd“.
Запазете новото.c файл и го затворете. Сега го компилирайте с помощта на компилатора gcc.
$ gcc ново.° С
Докато изпълнявахме този код, добавихме данни в анкета, която да бъде прочетена, и тя записва данни отново, както в изхода по-долу.
$ ./ а.навън
Заключение:
В тази по-горе описана статия обсъдихме системното повикване poll () на език C. Надявам се този урок да ви бъде полезен и ефективен, докато работите с операционната система Linux.