C Програмиране

Как да използвам системно обаждане на анкета в C

Как да използвам системно обаждане на анкета в C
Функцията poll () позволява на програмите да мултиплексират въвеждане и извеждане чрез поредица от файлови дескриптори. С други думи, системното повикване poll () е аналогично на системното повикване select () при работа, тъй като запазва огъня за един от няколко дескриптора на файлове, като става достъпно за I / O. Poll () изследва назначения дескриптор на документ за изброяване на събитието (я) в инциденти към всеки елемент от масива, сочещ към него от файлови дескриптори. Методът poll () може да определи към кой от файловите дескриптори дадена програма ще чете или записва подробности, които са видели тези инциденти. В това ръководство ще използваме Ubuntu 20.04, за да разберем концепцията за системен разговор poll () на Linux стъпка по стъпка.

Синтаксис:

анкета 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.

Инсталирайте най-новата стратегия за игра OpenRA на Ubuntu Linux
OpenRA е Libre / Free Real Time стратегия за игра, която пресъздава ранните игри на Westwood като класическата Command & Conquer: Red Alert. Разпредел...
Инсталирайте най-новия Dolphin Emulator за Gamecube & Wii на Linux
Dolphin Emulator ви позволява да играете избраните от вас игри Gamecube & Wii на Linux Personal Computers (PC). Като безплатно достъпен и емулатор на...
Как да използвам GameConqueror Cheat Engine в Linux
Статията обхваща ръководство за използването на GameConqueror cheat engine в Linux. Много потребители, които играят игри под Windows, често използват ...