PRCTL w C Przykładowe użycie

PRCTL w C Przykładowe użycie
W języku C użyto wywołania systemu PRCTL w celu manipulowania różnorodnymi cechami funkcji wywołania lub działań procesowych. Pierwszy parametr wywołania systemowego „PrCTL” określa, co należy zrobić z zainicjowanymi wartościami w nagłówku. Wszystkie pozostałe argumenty lub parametry byłyby używane zgodnie z pierwszym argumentem i jego wartością. Rzućmy się głęboko na wywołanie systemu „PrCTL” w C, podczas gdy my pracujemy nad Ubuntu 20.04 W momencie wdrożenia tego artykułu.

Przykład 01:

Otwórz i zaloguj się z Ubuntu 20.04 i uruchom aplikację o nazwie „Terminal” z obszaru aktywności. Można to zrobić, używając prostego skrótu kluczowego „Ctrl+alt+t” na pulpicie. Utwórz plik typu C, aby zaimplementować wywołanie systemowe PRCTL (), wykonaj polecenie pokazane w snap pod spodem.

$ Touch PRTCL.C

Po utworzeniu otwórzmy plik za pomocą edytora GNU Nano.

$ nano prtcl.C

Dodaj kod pokazany w obrazie Snap pod spodem w pliku GNU. Kod zawiera niezbędne pliki nagłówka do działania kodu PRCTL (). Następnie stworzyliśmy i zdefiniowaliśmy 4 wątki o nazwie proces1, proces2, proces3 i proces4. Wszystkie 4 procesy lub funkcje zawierają pustkę jako parametr ogólny lub podpisowy, ale może to być coś innego. Jak już wcześniej opracowaliśmy, pierwszy parametr wywołania systemowego „prctl ()” pokaże, co musimy zrobić z funkcją wywołania. Tak więc nazywaliśmy PRCTL () we wszystkich 4 metodach, aby ustawić nazwę procesu za pomocą argumentu „PR_SET_NAME”. Po 2 -sekundowym snu funkcja PUTS zostanie wykonana, aby ustawić nazwę procesu.

Następnie zadeklarowaliśmy wskaźnik typu tablicy o nazwie „FP”, a jego elementy zawierają nazwy 4 metod lub procesów. Główna metoda zadeklarowała tutaj zmienną „id” wskazuje procesy. Pętla „for” została tutaj użyta do utworzenia procesu potomnego dla każdego procesu nadrzędnego przy użyciu metody „Fork ()” i zapisywania jej w zmiennej „int”. Oświadczenie „jeśli” zostało użyte do sprawdzenia, czy „id” to 0. Jeśli warunek się spełni, wydrukuje numer procesu dziecka, a tablica „FP” zostanie użyta jako metoda pobierania pierwszego elementu, procesu 1 i tak dalej, aż do zakończenia pętli. Wywołanie metod w ten sposób sprawiłoby, że wykonałoby to wszystkie określone powyżej metody.

Najpierw skompiluj plik.

$ GCC PRCTL.C

Wykonanie pliku pokazuje poniższe wyjście. Nazwa została ustalona dla każdego procesu.

$ ./A.na zewnątrz

Przykład 02:

Zróbmy kolejną ilustrację PRCTL. Otwórzmy PRCTL.plik C.

$ nano prctl.C

Po uwzględnieniu nagłówków metoda „cap_1” została zainicjowana. Deskryptor pliku „F” został zdefiniowany, a zmienna „RES” została zainicjowana z wartością „-1”. Teraz deskryptor pliku zostanie użyty do uzyskania maksymalnej możliwości z jądra. Deskryptor pliku otworzy plik jako tylko odczyt z folderu jądra. Jeśli deskryptor pliku otrzyma więcej niż 0 znaków, tablica „BUF” zostanie zdefiniowana za pomocą rozmiaru 32. Zdefiniowano dwie liczby całkowite, a metodę odczytu została użyta do uzyskania danych z bufora za pomocą deskryptora pliku i zapisano do zmiennej „NUM”. Jeśli zmienna „NUM” jest większa niż 0, wartość dopasowana do indeksu zmiennej „NUM” zostanie zainicjowana jako null. Metoda „SSCANF” powiąza wskaźnik „RES” z tablicą „BUF” i przechowuje ją w zmiennej „R”. W ten sposób można uzyskać maksymalną zdolność z jądra. Jeśli wartość zmiennej „R” nie jest równa 1, ponownie zaktualizuje wartość „RES” z „-1”. Ostatecznie opis został zamknięty.

Druga metoda, „CAP_2” została użyta do zainicjowania zmiennej zdolności równa się 0. Metoda PRCTL () używa „pr_capbset_read” do odczytania maksymalnej możliwości. Jeśli wartość zdolności jest większa niż 0, zostanie ona zwiększona. Gdy możliwość osiągnie 0, zatrzyma się przyrost i zwróci wartość „CP” ze spadkiem 1.

Główną metodą jest uzyskanie możliwości z „cap_1” i cap_2 i wydrukowanie jej na warunku jest spełnione.

Kompilacja i uruchomienie tego pliku pokazują, że maksymalna wartość pojemności wynosi 40.

$ GCC PRCTL.C
$ ./A.na zewnątrz

Wniosek:

W tym przewodniku omówiliśmy dwa przykłady do rozwinięcia połączenia systemowego PRCTL (). Bardzo ci to pomoże, ponieważ pokazaliśmy to z dwoma różnymi argumentami.