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

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

Как да използвам Изберете системно обаждане в C
Системното повикване select () позволява на системата да следи няколко файлови дескриптора. И така, системното повикване за избор изчаква някой от дескрипторите или цялото да се окаже „готов“ за определен тип I / O дейност (e.ж., въвеждане възможно). Ако последващият I / O процес (напр.ж., read (2)) може да се извърши въпреки блокирането, дескрипторът на файла се счита за способен. Методът select () описва дали дескриптор на документ е достъпен за четене, подготвен за писане или в състояние на изключение. Да предположим, че посочената ситуация е невярна за изцяло посочените дескриптори на файлове. В този случай системните извиквателни блокове select () преди споменатите обстоятелства са валидни поне за един от посочените дескриптори на документи, равен на посочения интервал на изчакване.

Пример за Select System Call:

Нека имаме прост пример, за да проверим работата на select system call. Отворете обвивката на командния ред, като използвате „Ctrl + Alt + T.”След отварянето на терминала, уверете се, че имате инсталиран компилатор на език C на вашата система, защото кодът няма да работи без него. Ако нямате такъв, изпробвайте командата по-долу, за да го направите.

$ sudo apt инсталирайте gcc

Ако искате да видите как системното повикване за избор на Linux работи, трябва да имате инсталиран пакет manpages-dev на вашата система съгласно командата по-долу. Напишете вашата потребителска парола, за да продължите.

$ sudo apt install manpages-dev

Можете да видите синтаксиса и работата на системното повикване за избор, като използвате командата по-долу „man“.

$ man 2 изберете

По-долу е показана изходната справочна страница за избраното системно повикване. Излезте от него, като натиснете бутона „q“.

Стандартните директории, терминал на командната обвивка и псевдо-терминални приложения, документи, центрирани в STREAMS, FIFO, включително тръби, се поддържат от модула select (). Дейността на select () на дескриптори на документи, отнасящи се до тези други файлови формати, е неизвестна. Така че по-долу е обяснението на системното повикване Select.

Описанието на синтаксиса, показано в горното изображение, е описано по-долу.

По-горе е библиотеката, която трябва да бъде включена в C кода, докато се използва системното повикване select. Ако не е включен, кодът не работи.

The nfds израз определя набора от дескриптори на файлове, който ще бъде оценен. Методът select () проверява файловите дескриптори между 0 и nfds-1.

Докато readfds не е нула, той се отнася до масив от форма fd_set, който определя кои дескриптори на документи трябва да бъдат тествани за готовност за четене при въвеждане и кои дескриптори на документи трябва да бъдат настроени за четене при изход.

Когато writefds параметърът не е празен, той се отнася до обект от форма fd_set, който определя кои дескриптори на документи трябва да бъдат тествани за готовност за вписване при въвеждане. Дескрипторите на документи трябва да бъдат подготвени за съставяне на изхода.

Докато errorfds параметърът не е празен, той се отнася до обект от рода fd_set, който определя кои дескриптори на документи трябва да бъдат тествани за изчакване на състоянието на грешката при въвеждане; също така дескрипторите на документи трябва да бъдат проверени на изхода.

Параметрите readfds, writefds и errorfds се актуализират след приключване, за да означават, че дескрипторите на документи са подготвени за четене, изцяло подготвени за писане или дори имат състояние на изключение в очакване, съответно. Ако последващият бит е фиксиран на входа и съответната ситуация е валидна за всеки дескриптор на файл малко под nfds, следващият бит ще бъде поставен на ефективно изпълнение.

Въпреки че параметърът за изчакване всъщност не е празен, той води до структура timeval, която определя най-доброто време за задържане на огъня, за да завърши изборът. Select () не пречи напълно, ако такъв параметър за изчакване води до обект timeval на структура с 0 елемента. Select () спира, освен ако събитието позволява извличане на един от филтрите с истински (ненулев) резултат, независимо дали операторът за изчакване е празна препратка. Select () успява ефективно и произвежда 0, когато периодът на изчакване приключи дори преди да се случи, което може да изисква една от няколко маски да бъде коригирана на ненулева стойност.

Този макрос елиминира колекцията (изтрива всички дескриптори на документи). Може да се използва като първият ход в инициализирането на колекция от дескриптори на документи.

Дескрипторът на документа fd се добавя към колекцията от този макрос. Използването на дескриптор на документ към вече съществуваща колекция би било неработещо и следователно не води до грешка при изключение.

Дескрипторът на документа fd се премахва от колекцията от този макрос. Дескриптор на файл, елиминиран от колекцията, който не съществува, не работи и следователно не води до изключение.

Системното повикване select () променя информацията или данните от колекциите съгласно правилата, споменати по-горе. Макросът FD ISSET () може да бъде изхвърлен чрез извикване на select (), за да се види дали дескрипторът на документа остава наличен в колекция.

Нека създадем нов файл от тип C с име „new.c ”, както е показано по-долу.

$ nano ново.° С

Редакторът на GNU е отворен. Изпишете долния код в него. Кодът съдържа заглавки, основна функция с някои файлови дескриптори, както е разработено по-горе. Той също така съдържа структура за стойността на интервала от време. След това използвахме системното повикване select, за да проверим за грешка в оператора „if“. Натиснете „Ctrl + S“, за да запазите този код и „Ctrl + X“ от излизане от редактора.

Сега компилирайте кода, като използвате инструкцията “gcc”.

$ gcc ново.° С

Изпълнете кода и не добавяйте никакви данни. Изходът ще каже „изберете време за изчакване.”

$ ./ а.навън

Отново стартирайте кода и въведете малко данни в терминала, напр.ж., „Aqsa.“Ще изведе, че„ данните са налични.”

Заключение:

Ние внедрихме системното обаждане select на Ubuntu 20.04 Linux система. Кодът трябва да работи на всички дистрибуции на Linux еднакво и правилно. Надявам се, че ще намерите тази статия лесна за изпълнение и разбиране.

WinMouse ви позволява да персонализирате и подобрите движението на показалеца на мишката на компютър с Windows
Ако искате да подобрите функциите по подразбиране на показалеца на мишката, използвайте безплатна програма WinMouse. Той добавя още функции, за да ви ...
Бутонът на левия бутон на мишката не работи в Windows 10
Ако използвате специална мишка с вашия лаптоп или настолен компютър, но бутонът на левия бутон на мишката не работи на Windows 10/8/7 по някаква причи...
Курсорът скача или се движи произволно, докато пишете в Windows 10
Ако установите, че курсорът на вашата мишка скача или се движи самостоятелно, автоматично, произволно, докато пишете в лаптоп или компютър на Windows,...