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.