Składnia
#włączać
# int sigaction (int sig, const struct sigaction *__ ograniczenie__ new, struct sigaction *__ ograniczać__ stary);
Funkcja sigaction analizuje działanie związane z konkretnym sygnałem. Mówimy teraz o argumentach w parametrze funkcji sigaction. Pierwszy to INT „SIG”, ponieważ typ danych ujawnia, że jest to liczba, która odnosi się już do rozpoznawanego sygnału. Funkcja sigaction ustawia akcję i kojarzy ją z sygnałem. Używany argument SIG musi znajdować się w bibliotece.
Stała struktura to wskaźnik, który najpierw jest nazywany głównie zerową. Jeśli tak, wówczas funkcja sigaction analizuje działanie zdefiniowane obecnie do obsługi SIG. To nie zmodyfikuje ani nie anuluje tego działania. A jeśli nowy wskaźnik nie jest określany jako wartość zerowa, będzie on wskazywał na strukturę sigakcji. Działanie zidentyfikowane konkretnie w strukturze Sigaction staje się wówczas nowym działaniem związanym z SIG.
Trzecim argumentem jest struktura *stary, wskazuje adres pamięci, pod którym funkcja sigaction przechowuje strukturę sigakcji. Funkcja Sigaction używa tego adresu pamięci do przechowywania struktury opisującej działanie obecnie powiązane z SIG. Stara wartość może być wartością zerową; W takim przypadku struktura sigakcji nie jest przechowywana jako informacje.
Struktura sigakcji
Teraz porozmawiamy o strukturze Sigaction.
Członkowie obecni w strukturze są tutaj wymienione.
Void (*) (int) sa_handler
Jest to wskaźnik funkcji i obsługuje sygnał do niej dochodzący. Wartość tej funkcji może wyświetlić akcję domyślną lub wskazać sygnał do zignorowania.
Maska sigset_t
Nie możemy użyć mechanizmu blokowania dowolnego sygnału; Jeśli SA_Mask użył sygnałów blokujących, sygnały te zostaną zignorowane. Funkcja sigacation () nie zwraca żadnego błędu.
Int sa_flags
Istnieje wiele flag, które wpływają na zachowanie sygnału. Niektóre z nich są tutaj wyjaśnione.
_Sa_ignore
To jedyne wyjście, a każda aplikacja nie może tego określić.
SA-RESTART
Mówi systemowi, aby otrzymali funkcje uruchomienia biblioteki, jeśli zostaną przerwane przez sygnał. Funkcje, na których zastosowano tę funkcję restartu, to te, które są zdefiniowane jako przerwane przez sygnał, a następnie ustawiają errno na eintr, które akceptują (), pauza (), close () i big pauza () są tymi, które są te funkcje, które są ponowne uruchomienie, jeśli sygnał im przeszkadza.
SA_SIGINFO
Ta funkcja mówi systemowi, aby użył działania sygnału określonego przez SA_SIGACTION zamiast SA_HANDLER. Gdy flaga jest wyłączona, a na działanie wpływa sygnał, wówczas funkcja obsługi sygnału określona przez SA_HANDLER jest wywoływana jako funkcja void (int signo); Tutaj Signo zawiera numer sygnału wygenerował system.
Sa_sigaction
Jest to wskaźnik wskazujący przypisaną funkcję do obsługi sygnału. Ta funkcja zawiera trzy parametry. Pierwszy zawiera liczbę całkowitą zawierającą sygnał funkcji, aby się wywołać. Drugim argumentem jest typ wskaźnika siginfo_t; Zawiera dodatkowe informacje o źródle sygnału. Trzeci to „wskaźnik do unieważnienia.'
Wdrożenie funkcji Sigaction
Zaimplementowaliśmy kody sigakcji w systemie operacyjnym Linux. Użyj edytora tekstu, aby napisać kod źródłowy w języku programowania C; Dla wyjściowej wartości wynikowej użyj terminalu Ubuntu, kompilując przez kompilator GCC. Ten kompiluj, a następnie wykonuje kod.
Przykład 1
Ten przykład zawiera listę bibliotek i . W tym przykładzie używana jest maska sygnałowa i ustawiana z sigaction () bez wzywania drugiego przewodnika, zwłaszcza gdy używany jest pojedynczy moduł obsługi. Funkcja obsługi sygnału zawiera Signo jako argument.
Identyfikator procesu jest wyświetlany w programie głównym, aby zapewnić pracę. Sigaction to struktura opisująca obsługę sygnału. To jest powód, dla którego zawiera obsługa sygnału. Zastosowana jest maska sygnałowa, która pokazuje, że powinna być zablokowanie sygnału, podczas gdy funkcja obsługi sygnału jest wykonywana. Teraz określ funkcję obsługi sygnału, gdy wystąpił jeden określony sygnał.
# Ustawa o strukturze;
# działać.sa.Handler = $ sighandler;
Następnie wszystkie sygnały są dodawane do zestawu maski sygnałowej. Wszystkie sygnały zostaną zablokowane podczas uruchomienia funkcji obsługi sygnału. Kiedy nasza obsługa sygnału zwykle istnieje, przywraca oryginalną maskę sygnałową. SA_RESTART wznowi funkcję. Do Sigint dodaje się obsługę sygnału.
Po napisaniu kodu skompiluj go za pomocą kompilatora w terminalu Ubuntu. „Sig.c ”to nazwa pliku.
$ gcc -o sig. C
$./sig
Po wykonaniu widać, że identyfikator procesu jest wyświetlany najpierw, którego sygnały należy zablokować. Wyświetlany komunikat oznacza, że funkcja zwróci wartość dodatnią.
Przykład 2
Teraz rozważ inny przykład, w którym pierwsza część przykładu określa, czy sygnał SIGCHLD jest obecnie ignorowany. Używając wskaźnika zerowego do nowego argumentu, bieżący moduł obsługi sygnału nie jest zmieniany. Główny program zawiera instrukcję IF do korzystania z funkcji Sigaction; Jeśli zwrócona wartość wynosi -1, oznacza to, że dziecko jest ignorowane. A w drugiej części, jeśli zwrócona wartość jest samym sygnałem. Oznacza to, że dziecko jest domyślne.
Podczas egzekucji zobaczysz, że domyślnie dziecko.
Przykład 3
Ten przykład zawiera tę samą funkcjonalność co drugi przykład, ale dodano również niektóre dodatkowe funkcje. Jakby nowa obsługa jest dodawana w tej funkcji poprzez sigact.
Wniosek
Użycie funkcji artykułu zawiera działającą funkcję i szczegółowy opis jej parametrów w argumentach. Sigaction odgrywa istotną rolę w blokowaniu tych sygnałów, które nie są rozpoznawane lub pochodzą od hakerów. Właśnie dlatego większość programistów woli funkcje sigakcji, które należy stosować w programach. SA_FLAG jest niezbędnym argumentem funkcji sigaction, dlatego wyjaśniliśmy kilka ważnych flag o podstawowej funkcjonalności. System operacyjny Linux ma zastosowanie do ważnej roli we wdrażaniu funkcji Sigaction w języku programowania C. Ten przewodnik ma na celu wyjaśnienie funkcji sigakcji i struktury zaprojektowanej w celu ukierunkowania zbliżających się do niego sygnałów.