C Użycie funkcji SIGPROCMSK

C Użycie funkcji SIGPROCMSK
Być może słyszałeś o programowaniu gniazda w C. Jedną z funkcji gniazda jest funkcja „sigProcmask”. Ta funkcja była zwykle wykorzystywana w kodzie do kontroli lub zmiany maski sygnałowej funkcji wywołania. Maska sygnałowa jest terminem używanym dla grupy sygnałów, które są obecnie blokowane i nie można jej przekazać dla funkcji wywołania. Taki rodzaj sygnału jest znany jako „zablokowane sygnały.„Można powiedzieć, że proces może nadal odbierać zablokowane sygnały, ale nie będzie on używany, dopóki nie zostaną odlbożowane i zwolnione, ja.mi., uniesiony. Do tego czasu będzie w toku. Dlatego w ramach dzisiejszego przewodnika będziemy omawiać użycie funkcji SIGProcMask w programowaniu C. Zacznijmy.

Po Ubuntu 20.04 Udane logowanie, musisz uruchomić powłokę Ubuntu 20.04 System po raz pierwszy po zalogowaniu. Wypróbuj skrót „Ctrl+alt+t” po prostu na ekranie komputerów stacjonarnych. W ciągu kilku sekund wprowadzi dla Ciebie powłokę terminala. Pamiętaj, aby zaktualizować system za pomocą pakietu Apt swojego systemu. Następnie musisz wykonać instrukcję „dotyk” wraz z nazwą pliku, którą chcesz wygenerować, ja.mi., Aby utworzyć plik C za pomocą powłoki. Ten nowo utworzony plik można znaleźć w folderze „Home” Eksploratora plików systemu. Możesz spróbować otworzyć go z edytorem „tekst”, aby utworzyć w nim kod. Innym sposobem otwarcia go w skorupce jest użycie edytora „GNU Nano” za pomocą słowa kluczowego „Nano” o nazwie pliku, jak pokazano pod spodem.

Przykład 01:

Rozpoczęliśmy nasz kod w edytorze „Nano”, włączając kilka niezbędnych nagłówków C. Te nagłówki mogą być najczęstszymi nagłówkami, takimi jak „stdio.h ”,„ unistd.h ”i„ stdlib.H". Poza tym najważniejszy plik nagłówka „sygnał.H ”dodano w celu wykorzystania funkcji obsługi sygnału w kodzie C. Wszystkie prace zostały wykonane w metodzie Main () tego programu. Tak więc po uruchomieniu metody zainicjowaliśmy niektóre zmienne konstruktu sygnału za pomocą obiektu „sigset_t”, i.mi., S, OS i PS. „S” oznacza sygnał, „OS” oznacza oryginalny zestaw sygnał.

„Sigemptyset” wykorzystuje konstrukt „S” do zainicjowania lub zadeklarowania maski sygnałowej i lekceważenia wszystkich sygnałów. Następnie wykorzystano funkcję „sigaddset” do dodania zainicjowanego sygnału „S” do określonego zestawu sygnału SIGINT. Procedura obsługi sygnału SIGINT odnosi się do „Ctrl+C”, i.mi., Postać przerwania. Zatrzyma wykonywanie bieżącego procesu i wróci do głównej pętli.

Teraz pojawia się funkcja sigProcmask, używając trzech parametrów. Parametr SIG_BLOCK pokazuje, że wszystkie sygnały znalezione w zestawie sygnału „S” zostaną dodane do bieżącego zestawu sygnału. & S wskazuje wskaźnik do określonego zestawu sygnału, który został użyty do zmiany maski sygnałowej zgodnie z konstrukcją „sigint”. Parametr „OS” wskazuje w kierunku zestawu sygnału przechowywania maski sygnału dla określonej metody. Instrukcja printf jest tutaj, aby wyświetlić starą maskę sygnałową zestawu sygnału. Funkcja „sigpending” ma na celu zapisanie danych dotyczących sygnałów w toku, które są w toku. Instrukcja printf jest znów tutaj, aby pokazać ustawiony zestaw sygnału na powładzie za pomocą konstrukcji „PS”. Metoda „Kill” pojawiła się tutaj, aby zabić obecny proces za pomocą identyfikatora procesu za pomocą funkcji „getPid ()”. Funkcja sigpending jest ponownie wywoływana, aby uzyskać oczekujące sygnały w zestawie, a instrukcja PrintF wyświetli je. Funkcja SIGProcMask wykorzystuje predefiniowany zestaw „SIG_UNBLOCK”, aby kontynuować odblokowanie i podnoszenie funkcji na liście oczekującej. Zestaw sygnału „S” zostanie wydany za pomocą Maski Signal „OS."

Skompiluj plik kodu C za pomocą instrukcji pokazywania się w skorcie.

Twój plik został wykonany. Pokaże ci stary zestaw sygnału na skorupce: „OS.”Ale ponieważ sygnały zestawu„ S ”są teraz zablokowane, zobaczymy, że sygnały odbierają, ale toczą się i nie wykonywają. Nie możemy zabić procesu, ponieważ przetwarzanie sygnałów jest zablokowane. W końcu wydaliśmy sygnały.

Przykład 02:

Spójrzmy na inny przykład funkcji „sigProcmask”, jest C do zablokowania i odblokowania określonego zestawu sygnału. Więc dodaliśmy nowy plik i wypróbowaliśmy nowy kod. Najpierw musisz dodać te same pliki nagłówka w pliku kodu, jak pokazano poniżej. Definiowana przez użytkownika funkcja „łapacza” jest tutaj po prostu wyświetlana, że ​​jesteśmy w tej funkcji za pomocą jej funkcji drukowania.

Główne wykonanie rozpoczyna się od funkcji Main () naszego kodu. Zawiera dwa argumenty. Przede wszystkim wykorzystaliśmy konstrukty czasowe „s” do startu i „f” do wykończenia za pomocą słowa kluczowego „time_t”. Sigaction struktury jest deklarowany jako „SACT”, aby ustawić naturę dla sygnału do zrobienia czegoś. Konstrukcja „sigset_t” służy do deklarowania dwóch zestawów sygnałów, i.mi., „NS” dla nowego zestawu i „systemu operacyjnego” dla starych zestawów. Zmienna typu „DIF” jest zadeklarowana. Przede wszystkim funkcja sigemptyset jest używana do inicjowania maski sygnałowej dla struktury „sact” i wykluczenia wszystkich sygnałów. Podręcznik SA_FLAGS został użyty do maski bitowej i zainicjowany do zera. „Sa_handler” został użyty do deklarowania funkcji „łapacza” jako obsługi sygnału za pomocą obiektu sigaction „SACT”. Funkcja sigakcji jest tutaj wywoływana za pomocą sigalrm do ustawienia alarmu dla sygnału „sact” tutaj.

„Sigemptyset” został wykorzystany na zestawie sygnału „NS”, aby zainicjować maskę sygnałową i wykluczyć wszystkie sygnały. Funkcja Sigaddset dodaje sigalrm do zestawu sygnału „NS”. SIGProcmask dodaje sygnały „NS” do bieżącego zestawu sygnału. Zestaw sygnału „OS” reprezentuje maskę sygnału dla określonego procesu. Czas rozpoczęcia został odnotowany i wydrukowany za pomocą funkcji „CTime ()” w PrintF. Alarm przez 1 sekundę jest inicjowany i odnotowano czas zakończenia. Różnica między czasem wykończenia a czasem rozpoczęcia została obliczona za pomocą funkcji „różni się”. Jeśli różnica jest mniejsza niż 10 sekund, funkcja SIGProcMask użyje zestawu sygnału „OS”, aby zastąpić obecną maskę sygnału dla określonego procesu za pomocą SIG_SetMask. Ostatnia instrukcja PrintF jest tutaj, aby pokazać czas, w którym zestaw sygnału jest zwolniony dla alarmów.

Po skompilowaniu i uruchomieniu pliku pokazuje nam czas, w którym zestaw sygnału alarmowego jest zablokowany. Po kilku sekundach wywoływana jest funkcja łapacza, a inne stwierdzenie pokazuje czas odblokowania zestawu sygnału alarmowego do uwalniania.

Wniosek:

W tym artykule pokazano wyjaśnienie dotyczące wykorzystania funkcji SIGProcmask w języku C. Omówiliśmy 2 krótkie i proste przykłady ilustrujące działanie funkcji SIGProcMask wraz z innymi funkcjami sygnału. Mamy nadzieję, że ten artykuł będzie premią dla każdego użytkownika, który jest nowy w sygnałach.