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

Как использовать системный вызов Select в C

Как использовать системный вызов Select в C
Системный вызов select () позволяет системе отслеживать несколько файловых дескрипторов. Таким образом, системный вызов select ожидает, пока один из дескрипторов или целое окажется «готовым» к определенному типу операций ввода-вывода (e.грамм., возможен ввод). Если последующий процесс ввода-вывода (e.грамм., read (2)) может выполняться, несмотря на блокировку, дескриптор файла считается работоспособным. Метод select () описывает, доступен ли дескриптор документа для чтения, подготовлен к записи или находится в состоянии исключения. Предположим, что заявленная ситуация неверна полностью для указанных файловых дескрипторов. В этом случае блоки системного вызова select () до упомянутых обстоятельств действительны как минимум для одного из указанных дескрипторов документа, равного указанному интервалу тайм-аута.

Пример для выбора системного вызова:

Давайте рассмотрим простой пример, чтобы проверить работу системного вызова select. Откройте оболочку командной строки, нажав «Ctrl + Alt + T».«После открытия терминала убедитесь, что в вашей системе установлен компилятор языка C, потому что код не будет работать без него. Если у вас его нет, попробуйте следующую команду, чтобы сделать это.

$ sudo apt install gcc

Если вы хотите, чтобы системный вызов Linux select работал, в вашей системе должен быть установлен пакет manpages-dev в соответствии с приведенной ниже командой. Напишите свой пароль пользователя, чтобы продолжить.

$ sudo apt install manpages-dev

Вы можете увидеть синтаксис и работу системного вызова select, используя приведенную ниже команду «man».

$ man 2 выбрать

Страница вывода руководства для системного вызова select показана ниже. Выйдите из него, нажав клавишу «q».

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

Описание синтаксиса, показанного на изображении выше, приведено ниже.

Выше приведена библиотека, которая будет включена в код C при использовании системного вызова select. Если его нет, код не работает.

В нфд оператор определяет набор дескрипторов файла, который будет оцениваться. Метод 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 новый.c

Редактор GNU открыт. Напишите в нем код ниже. Код содержит заголовки, основную функцию с некоторыми файловыми дескрипторами, как описано выше. Он также содержит структуру для значения временного интервала. Затем мы использовали системный вызов select для проверки наличия ошибки в операторе «if». Нажмите «Ctrl + S», чтобы сохранить этот код, и «Ctrl + X», чтобы выйти из редактора.

Теперь скомпилируйте код с помощью инструкции «gcc».

$ gcc новый.c

Запустите код и не добавляйте ввод. На выходе будет сказано «выберите тайм-аут.”

$ ./ а.вне

Снова запустите код и введите ввод в терминал, e.грамм., «Акса.»Будет выведено, что« данные доступны.”

Заключение:

Мы реализовали системный вызов select на Ubuntu 20.04 Система Linux. Код должен работать на всех дистрибутивах Linux одинаково и корректно. Надеюсь, вам будет легко реализовать эту статью и понять ее.

Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...
Лучшие игры Oculus App Lab
Если вы владелец гарнитуры Oculus, вы должны знать о загрузке неопубликованных приложений. Боковая загрузка - это процесс установки на гарнитуру содер...
10 лучших игр для Ubuntu
Платформа Windows была одной из доминирующих платформ для игр из-за огромного процента игр, которые разрабатываются сегодня с встроенной поддержкой Wi...