Wywołania systemowe

Co to jest wywołanie systemowe w systemie Linux i jak działa z przykładami

Co to jest wywołanie systemowe w systemie Linux i jak działa z przykładami

Wywołanie systemowe to funkcja, która umożliwia procesowi komunikowanie się z jądrem Linuksa. To tylko programowy sposób, w jaki program komputerowy może zamówić obiekt z jądra systemu operacyjnego. Wywołania systemowe udostępniają zasoby systemu operacyjnego programom użytkownika poprzez API (interfejs programowania aplikacji). Wywołania systemowe mają dostęp tylko do frameworka jądra. Wywołania systemowe są potrzebne dla wszystkich usług, które potrzebują zasobów.

Jądro Linuksa to zastrzeżone oprogramowanie, które ładuje się i działa na urządzeniu na najmniej potencjalnym etapie. Jego zadaniem jest organizowanie wszystkiego, co dzieje się na komputerze, od klawiatury, dysku i zdarzeń sieciowych po udostępnianie przedziałów czasowych dla równoczesnego wykonywania różnych programów. Oddzielenie oprogramowania i sprzętu tworzy bezpieczną bańkę, która poprawia ochronę i niezawodność. Nieuprzywilejowane aplikacje nie są w stanie uzyskać dostępu do pamięci innego programu, a jeśli jeden się nie powiedzie, jądro zawiesza proces, aby nie uszkodzić całego systemu.

Cienkie opakowanie waflowe:

Wywołania systemowe Linuksa nie są jawnie renderowane do jądra w niektórych programach. Prawie wszystkie programy używają podstawowej biblioteki C i oferują lekkie, ale niezbędne opakowanie na wywołania systemu Linux Linux. Repozytorium udostępnia następnie towarzyszące wywołanie maszyny z systemem Linux po upewnieniu się, że parametry funkcji są tłumaczone na odpowiednie rejestry procesora. Za każdym razem, gdy wrapper otrzymuje dane z wywołania systemowego, analizuje je i wyraźnie wprowadza do programu. Każda operacja interaktywna z maszyną w programie jest ostatecznie przekształcana w wywołanie systemowe. Przyjrzyjmy się więc niektórym z nich. Istnieje długa lista wywołań systemowych Linux, których możemy używać w naszym systemie Linux. Oto lista niektórych popularnych i najczęściej używanych wywołań systemowych Linux.

Porozmawiajmy o niektórych wywołaniach systemu Linux przy użyciu języka C w naszym artykule, aby się z nim zapoznać.

Otwórz wywołanie systemowe:

Możemy użyć wywołania systemowego „Open” w naszej dystrybucji Linuksa, aby szybko otworzyć dokument, który określimy w naszym kodzie języka C. Najpierw uruchom terminal poleceń. Możesz użyć skrótu „Ctrl+Alt+T”. Załóżmy, że masz plik tekstowy „test.txt” w katalogu domowym i zawiera pewną zawartość some. Tak więc na początku musisz utworzyć nowy plik typu C o nazwie „nowy.c” w terminalu za pomocą edytora nano. Dlatego wypróbuj poniższą prostą instrukcję nano.

$ nano nowy.do

Teraz uruchomiono edytor Nano. Wpisz w nim pokazany poniżej kod. W kodzie mamy dwa deskryptory plików. Oba pliki można otworzyć za pomocą otwartego wywołania systemowego. Pierwszy deskryptor zawiera wywołanie odczytu, a drugi zawiera funkcję zapisu write. Pierwszym otwartym wywołaniem jest otwarcie pliku tekstowego „test.txt” i zapisanie jego zawartości w deskryptorze pliku „fd”. Drugim otwartym wywołaniem systemowym jest utworzenie pliku o nazwie „target”. Dokument „docelowy” został zwrócony do deskryptora pliku „fd1”. Instrukcja write służy do transkrypcji bajtów danych w buforze. Dotknij "Ctrl + S", aby zapisać kod i naciśnij klawisz skrótu "Ctrl + X", aby zamknąć plik.

Uruchom instrukcję kompilacji gcc, aby skompilować ten kod C.

$ gcc nowy.do

Wykonajmy kod za pomocą prostego „a.out” zapytanie w powłoce w następujący sposób:

$ ./za.na zewnątrz

Dane wyjściowe zostały przesłane do pliku „target”. Sprawdźmy plik „docelowy” za pomocą zapytania „cat”. Ekran wyjściowy pokazuje 20-znakowe dane w pliku „docelowym”.

$ koci cel

Wywołanie systemowe Exec:

Wywołanie systemowe exec jest odrzucane, aby uruchomić plik, który jest aktualnie przetwarzany. Poprzedni plik wykonywalny jest zastępowany, a bieżący plik jest obsługiwany przy każdym wywołaniu exec. Używając wywołania systemowego exec możemy założyć, że spowoduje to nadpisanie starego dokumentu lub aplikacji w pętli nowym. Nowe oprogramowanie jest używane do nadpisania całego materiału procesu. Dokument, którego tytuł jest podany w instrukcji przy każdym wywołaniu exec() jest zastępowany sekcją informacji o użytkowniku, która uruchamia wywołanie systemowe exec()(). Otwórz terminal poleceń i za pomocą edytora nano utwórz nowy plik typu C w następujący sposób:

$ nano exp.do

Edytor został już otwarty. Napisz w nim cały poniższy kod języka C. Zawiera trzy główne biblioteki. Następnie utworzono wystąpienie głównej funkcji. Oświadczenie print wyświetlało dane ciągu i identyfikator procesu pliku „exp.do". W tym celu została użyta funkcja getpid(). Następnie mamy tablicę typów znaków z pewnymi wartościami. Wywołanie systemowe exec zostało użyte do pobrania nazwy pliku i jednej linii powyżej tablicy jako argumentu. Teraz plik „cześć.c” zostaną przetworzone. Potem przychodzi kolejna instrukcja print, ale nigdy nie zostanie wykonana. Naciśnij „Ctrl+S”, aby zapisać ten plik. Naciśnij „Ctrl+X”, aby wyjść.

Teraz nadszedł czas na utworzenie kolejnego pliku c, „cześć.c” za pomocą edytora nano. Użyj poniższego zapytania w powłoce, aby to zrobić.

$ nano cześć.do

Napisz w nim poniższy kod. Ten kod zawiera dwie instrukcje print w funkcji main. Pierwsza wypisuje tylko podany w niej napis, a druga wypisuje ten napis podczas pobierania identyfikatora procesu aktualnie używanego pliku, czyli „hello.do".

Skompilujmy oba pliki jeden po drugim za pomocą gcc.

$ gcc -o exp.do

$ gcc -o cześć witam.do

Kiedy wykonujemy exp.c, wypisze pierwszą instrukcję print z exp.c i obie linie wydruku z hello.plik c.

$ ./exp

Wniosek:

Omówiliśmy całą koncepcję wywołań systemowych Linux i sposób ich użycia w systemie Linux. Użyliśmy Ubuntu 20.04 podczas wdrażania tej koncepcji.

Gry Przydatne narzędzia dla graczy Linuksa
Przydatne narzędzia dla graczy Linuksa
Jeśli lubisz grać w gry w systemie Linux, prawdopodobnie używałeś aplikacji i narzędzi, takich jak Wine, Lutris i OBS Studio, aby poprawić wrażenia z ...
Gry Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Wielu twórców gier i wydawców wymyśla remaster HD starych gier, aby przedłużyć żywotność serii, prosimy fanów o kompatybilność z nowoczesnym sprzętem ...
Gry Jak używać AutoKey do automatyzacji gier Linux
Jak używać AutoKey do automatyzacji gier Linux
AutoKey to narzędzie do automatyzacji pulpitu dla systemów Linux i X11, zaprogramowane w Python 3, GTK i Qt. Korzystając ze skryptów i funkcji MAKRO, ...