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

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

Wezwanie systemowe to funkcja, która pozwala procesowi komunikować się z jądrem Linux. To tylko program programowy dla programu komputerowego zamówienia obiektu z jądra systemu operacyjnego. System wywołuje zasoby systemu operacyjnego na programy użytkowników za pośrednictwem interfejsu API (interfejs programowania aplikacji). Połączenia systemowe mogą uzyskać dostęp tylko do frameworka jądra. Połączenia systemowe są potrzebne dla wszystkich usług, które potrzebują zasobów.

Jądro Linux to zastrzeżone oprogramowanie, które ładuje się i działa na urządzeniu przynajmniej potencjalnym etapem. Jego zadaniem jest zorganizowanie wszystkiego, co dzieje się na maszynie, od klawiatury, dysku i wydarzenia sieci. Oddzielenie oprogramowania i sprzętu tworzy bezpieczną bańkę, która poprawia ochronę i niezawodność. Nieprzywilejowane aplikacje nie są w stanie osiągnąć pamięci innego programu, a jeśli ktoś się nie powiedzie, jądro zawiesza proces, aby nie uszkodzić całego systemu.

Torne opakowanie wafel:

Połączenia systemowe Linux nie są wyraźnie renderowane do jądra w niektórych programach. Prawie wszystkie programy korzystają z podstawowej biblioteki C i oferują lekkie, ale niezbędne opakowanie na wywołań systemu Linux. Następnie repozytorium zawiera towarzyszące połączenie maszyny Linux po upewnieniu się, że parametry funkcji są tłumaczone na właściwe rejestry procesora. Ilekroć opakowanie odbiera dane z wywołania systemu, analizuje je i wyraźnie przyczynia się do programu. Każda operacja interaktywna maszynowo w programie jest ostatecznie przekonwertowana na wywołanie systemowe. Więc spójrzmy na niektóre z nich. Istnieje długa lista połączeń systemowych Linux, których możemy użyć w naszym systemie Linux. Oto lista niektórych powszechnych i głównie używanych połączeń systemowych Linux.

  • otwarty
  • Zamknąć
  • Exec
  • Pisać
  • Czytać
  • Lseek
  • Wybierać

Porozmawiajmy o niektórych wywołań systemu Linux za pomocą języka C w naszym artykule, aby się z nim zawrzeć.

Otwórz połączenie systemowe:

Możemy użyć „otwartego” wywołania systemowego w naszym dystrybucji Linux, aby szybko otworzyć dokument, który określamy 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 testowy.txt ”w katalogu domowym i zawiera w nim pewne treści. Na początku musisz utworzyć nową nazwę pliku typu C.c ”w terminalu przez redaktor nano. Dlatego wypróbuj prostą poniżej instrukcję nano.

$ nano nowe.C

Teraz nano edytor został uruchomiony. Wpisz w nim kod poniżej podsłuchu. W kodzie mamy dwa deskryptory plików. Oba pliki można otworzyć za pomocą otwartego połączenia systemowego. Pierwszy deskryptor zawiera wywołanie odczytu, a drugi zawiera funkcję zapisu. Pierwsze otwarte połączenie otwiera plik tekstowy „Testuj.txt ”i zapisanie jej zawartości w deskryptorze pliku„ FD ”. Drugim otwartym połączeniem systemowym tworzy plik o nazwie „Target”. Dokument „cel” został zwrócony do deskryptora pliku „FD1”. Instrukcja zapisu służy do transkrypcji bajtów danych w buforze. Stuknij „Ctrl+S”, aby zapisać kod i naciśnij klawisz skrótu „Ctrl+X”, aby opuścić plik.

Uruchom instrukcję kompiluj GCC, aby skompilować ten kod C.

$ gcc nowe.C

Wykonajmy kod za pomocą prostego „A.Zapytanie o skorupę w następujący sposób:

$ ./A.na zewnątrz

Dane wyjściowe zostały przesłane do pliku „cel”. Sprawdźmy plik „docelowy” za pomocą zapytania „CAT”. Ekran wyjściowy pokazuje dane 20 znaków w pliku „docelowym”.

$ CAT Target

Wywołanie systemu EXEC:

Wywołanie systemu EXED jest odrzucane w celu uruchomienia aktualnie przetwarzanego pliku. Poprzedni plik wykonywalny jest zastąpiony, a bieżący plik jest obsługiwany za każdym razem, gdy Exec jest wywoływany. Korzystając z wywołania systemu EXEC, możemy założyć, że w ten sposób zastąpi stary dokument lub aplikację w pętli świeżą. Nowe oprogramowanie służy do zastąpienia materiału całego procesu. Dokument, którego tytuł jest podany w instrukcji, ilekroć wywołuje Exec (), jest zastąpiony sekcją informacji o użytkowniku, która uruchamia Call Call (). Więc otwórz terminal poleceń i, używając nano edytora, utwórz nowy plik typu C w następujący sposób:

$ nano exp.C

Redaktor został już otwarty. Napisz w nim cały kod językowy poniżej C. W tym są trzy główne biblioteki. Następnie główna funkcja została utworzona. Instrukcja drukowania pokazuje dane ciągów i identyfikator procesu pliku „Exp.C". Do tego celu zastosowano funkcję getpid (). Następnie mamy tablicę typu znaków z pewnymi wartościami. Wywołanie systemu EXEC zostało użyte do przyjęcia nazwy pliku i jednej linii powyżej tablicy jako argumentu. Teraz plik „Witaj.c ”będzie przetwarzane. Następnie do tej pory zbliża się kolejna instrukcja drukowania, ale nigdy nie zostanie wykonana. Naciśnij „Ctrl+S”, aby zapisać ten plik. Uderz „Ctrl+X”, aby wyjść.

Teraz nadszedł czas, aby utworzyć kolejny plik C: „Witaj.c ”Korzystanie z edytora Nano. Użyj poniższego zapytania w skorupce, aby to zrobić.

$ Nano Hello.C

Napisz w nim poniższy kod. Ten kod zawiera dwa instrukcje drukowania w głównej funkcji. Pierwszym z nich jest tylko drukowanie podanego w nim ciągu, a drugi drukuje ciąg, jednocześnie pobierając identyfikator procesu aktualnie używanego pliku.C".

Skompilujmy oba pliki jeden po drugim, używając GCC.

$ gcc -o exp exp.C
$ gcc -o hello hello.C

Kiedy wykonujemy EXP.plik C, wyprowadzi pierwszą instrukcję drukowania z exp.plik C i oba linie drukowania z Hello.plik C.

$ ./do potęgi

Wniosek:

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