Использование функции подписи в C

Какое направление для аутсорсинга программного обеспечения Программирование и разработка

Sigaction() — это функция, которая позволяет вызывать/наблюдать или проверять конкретное действие, связанное с конкретным сигналом. Считается, что функцию сигнала и сигнатуры следует рассматривать на одной странице. Но на самом деле этого не произошло. Функция signal() не блокирует другие сигналы, когда выполняется текущий обработчик. В то же время функция sigaction может блокировать другие сигналы до тех пор, пока текущий обработчик не вернется.

Синтаксис

#include <signal.h>
# int sigaction(int sig, const struct sigaction *__restrict__ new, struct sigaction *__restrict__ old);

Функция sigaction проверяет действие, связанное с конкретным сигналом. Теперь мы говорим об аргументах в параметре функции sigaction. Первый — int ’sig’, так как тип данных показывает, что это число, относящееся к уже распознанному сигналу. Функция sigaction устанавливает действие и связывает его с сигналом. Используемый аргумент sig должен находиться в библиотеке .

Константа struct sigaction — это указатель, который в первую очередь упоминается как NULL. Если да, то функция sigaction проверяет действие, определенное в данный момент для обработки sig. Это не изменит и не отменит это действие. И если новый указатель не имеет значения NULL, он будет указывать на структуру sigaction. Затем действие, определенное в структуре sigaction, становится новым действием, связанным с sig.

Третий аргумент — struct sigaction *old, он указывает адрес памяти, по которому функция sigaction хранит структуру sigaction. Функция sigaction использует этот адрес памяти для хранения структуры, описывающей действие, связанное в данный момент с sig. Старое значение может быть значением NULL; в этом случае структура подписи не сохраняется как информация.

Структура подписи

Теперь поговорим о структуре подписи.

Здесь упоминаются члены, присутствующие в структуре.

Void (*) (целое) sa_handler

Это указатель на функцию, который обрабатывает поступающий к ней сигнал. Значение этой функции может показывать действие по умолчанию или указывать сигнал, который следует игнорировать.

Sigset_t mask

Мы не можем использовать механизм блокировки любого сигнала; если sa_mask использовала блокирующие сигналы, эти сигналы будут проигнорированы. Функция sigaction() не возвращает никаких ошибок.

Читайте также:  MEAN или LAMP и не только: какой технический стек использовать

Int sa_flags

Существует множество флагов, влияющих на поведение сигнала. Некоторые из них объясняются здесь.

_Sa_ignore

Это единственный вывод, и ни одно приложение не может его указать.

Sa-restart

Он сообщает системе, что функции перезапуска библиотеки должны выполняться, если они прерываются сигналом. Функции, к которым применяется эта функция перезапуска, определяются как прерываемые сигналом, а затем задающие errno в EINTR, а accept(), pause(), close() и big pause() — это те функции, которые перезапускаемые, если сигнал прерывает их.

SA_SIGINFO

Эта функция указывает системе использовать действие сигнала, указанное sa_sigaction, вместо sa_handler. Когда флаг снят и на действие влияет сигнал, функция обработчика сигнала, указанная в sa_handler, вызывается как функция void (int signo); здесь signo содержит номер сигнала, сгенерированного системой.

SA_SIGACTION

Это указатель, указывающий на назначенную функцию для обработки сигнала. Эта функция содержит три параметра. Первый включает тип integer, содержащий сигнал функции для вызова. Второй аргумент представляет собой указатель типа siginfo_t; он содержит дополнительную информацию об источнике сигнала. Третий — «указатель на пустоту».

Реализация функции подписи

Мы внедрили коды подписи в операционной системе Linux. Используйте текстовый редактор для написания исходного кода на языке программирования C; для вывода результирующего значения используйте терминал Ubuntu, скомпилировав через компилятор GCC. Это компилирует, а затем выполняет код.

Пример 1

Этот пример содержит список библиотек и. В этом примере используется маска сигнала, которая с помощью sigaction() устанавливается на отсутствие вызова другого обработчика, особенно когда используется один обработчик. Функция обработчика сигнала содержит знак в качестве аргумента.

Идентификатор процесса отображается в основной программе для обеспечения работы

Идентификатор процесса отображается в основной программе для обеспечения работы. Sigaction — это структура, описывающая обработчик сигнала. По этой причине в нем содержится обработчик сигнала. Используется маска сигнала, показывающая, что должна быть блокировка сигнала во время выполнения функции обработки сигнала. Теперь укажите функцию обработчика сигнала, когда произошел один указанный сигнал.

# struct sigaction act;
# act.sa.handler = $sighandler;

После этого все сигналы добавляются в набор масок сигналов. Все сигналы будут заблокированы, когда работают функции обработчика сигналов. Когда наш обработчик сигнала обычно существует, он восстанавливает исходную маску сигнала. SA_RESTART возобновит работу функции. В SIGINT добавлен обработчик сигнала.

Читайте также:  Что такое карта сайта и как создать ее для своего веб-сайта

Все сигналы будут заблокированы, когда работают функции обработчика сигналов

После написания кода скомпилируйте его с помощью компилятора в терминале Ubuntu. «Sig.c» — это имя файла.

gcc –o sig. c
$./sig

При выполнении вы можете видеть, что первым отображается идентификатор процесса, сигналы которого необходимо заблокировать. Отображаемое сообщение означает, что функция вернет положительное значение.

Пример 2

Теперь рассмотрим другой пример, в котором первая часть примера определяет, игнорируется ли в данный момент сигнал SIGCHLD. При использовании указателя NULL для нового аргумента текущий обработчик сигнала не изменяется. Основная программа содержит оператор if для использования функции sigaction; если возвращаемое значение равно −1, это означает, что дочерний элемент игнорируется. А в другой части, если возвращаемое значение является самим сигналом. Это означает, что ребенок находится по умолчанию.

Теперь рассмотрим другой пример, в котором первая часть примера определяет

При выполнении вы увидите, что дочерний элемент по умолчанию.

При выполнении вы увидите, что дочерний элемент

Пример 3

Этот пример содержит ту же функциональность, что и второй пример, но также добавлены некоторые дополнительные функции. Вроде в эту функцию добавляется новый обработчик через sigaction.

Этот пример содержит ту же функциональность, что и второй пример

Вывод

Статья «Использование функции Sigaction» содержит описание работы функции и подробное описание ее параметров в аргументах. Sigaction играет жизненно важную роль в блокировании тех сигналов, которые не распознаны или исходят от хакеров. Вот почему большинство программистов предпочитают использовать в программах функции подписи. SA_FLAG является важным аргументом функции sigaction, поэтому мы объяснили некоторые важные флаги с базовой функциональностью. Операционная система Linux претендует на важную роль в реализации функции подписи на языке программирования C. Это руководство призвано объяснить особенности sigaction и структуру, предназначенную для нацеливания на приближающиеся к нему сигналы.

Оцените статью
bestprogrammer.ru
Добавить комментарий

Adblock
detector