Programowanie C

Kodowanie za pomocą fork i exec na przykładzie w c

Kodowanie za pomocą fork i exec na przykładzie w c
Tytuł naszego artykułu zawiera dwie różne funkcje języka C, które występują podczas uruchamiania dowolnego programu w naszym systemie. Niestety nie ma możliwości wystąpienia więcej niż jednego programu na raz w C. Tylko jedno zadanie może się zdarzyć w określonym czasie, co oznacza, że ​​nie pozwala na jednoczesne uruchamianie programów. Powoduje to, że czekasz na zakończenie jednego procesu, aby wykonać drugi. Aby uniknąć tego problemu z rozwiązywaniem problemów, być może będziesz musiał rozwijać swój program w dobry sposób, będąc dobrym programistą. Widelec Linux () służy do przezwyciężenia oczekiwania i umożliwienia współbieżności w twoim systemie. Pomaga w duplikowaniu nowego procesu i tworzy nowy, wywołując zduplikowany proces. Nowy proces jest procesem potomnym, a poprzedni nazywa się procesem nadrzędnym.

Natomiast funkcja exec() służy do zmiany istniejącego programu na nowy. Ta zamiana odbywa się poprzez wprowadzenie poprawek w treści programu lub pliku. Zatem różnica między fork i exec polega na tym, że fork tworzy nowy proces z istniejącego procesu, a exec służy do zastąpienia istniejącego programu poprzez utworzenie nowego.

Warunki wstępne

Aby uruchomić dowolny program w c w systemie Linux, musimy zainstalować na nim pewne wymagania wstępne pre. Przejdź do terminala za pomocą skrótu Ctrl+Alt+T. Teraz napisz następujące polecenia, aby zainstalować strony podręcznika.

$ sudo apt install manpages-dev

Zainstaluje wszystkie odpowiednie strony.

Idąc dalej, aby uruchomić program w systemie Linux, musisz zainstalować kompilator kodu. Służy do kompilacji kodu i wykonania go. W tym celu zainstalujemy w naszym systemie repozytoria GCC.

$ sudo apt zainstaluj GCC

Kodowanie z exec w c

Ponieważ zainstalowaliśmy strony podręcznika w systemie Linux, użyjemy następującego polecenia, aby zobaczyć opis dotyczący exec. Podstawowa składnia próbki jest następująca:

Składnia

Exec (ścieżka/plik, argv );

Tutaj użyliśmy „unistd.h”, ponieważ zawiera wszystkie informacje o rodzinach funkcji exec.

$ man exec

Teraz na powyższym obrazku możesz zaobserwować rodzaje exec. Oto rodzina funkcji exec. Każdy z nich służy do innej funkcji zgodnie z tą samą zasadą, „exec.”

Przykład: Teraz, idąc dalej, opiszemy funkcjonalność exec na przykładzie. Aby zademonstrować jego działanie, użyjemy jednej funkcji exec, którą jest „execv.” Najpierw utworzymy dwa pliki z rozszerzeniem „.do.” Po ich stworzeniu napiszemy w nich odpowiednie kody i wykonamy je, aby zobaczyć efekt.

Rozważ nazwę pliku „sample4.do". Otwórz go i użyj następującego kodu. W tym kodzie użyliśmy execv w sposób opisany poniżej.

Execv („./sample4copy” , args);

Pierwsza część zawiera nową ścieżkę katalogu, a druga część pokazuje tablicę argumentów jako parametr, który przekazaliśmy.

Próbka4.do

Przede wszystkim wydrukowaliśmy identyfikator bieżącego procesu. Po drugie, stworzyliśmy tablicę znaków zawierającą na końcu NULL na zakończenie. Po trzecie, nazwaliśmy funkcję sample4copy.

Próbka4kopia.do

Kiedy wywołujemy funkcję exec(), zmienia się obraz procesu. Poniżej cytowany obraz poniżej pokazuje kod sample4copy.do.

Tutaj użyliśmy tylko instrukcji print, aby uzyskać identyfikator bieżącego procesu.

Dane wyjściowe odpowiednich kodów można uzyskać za pomocą następujących poleceń.

$ GCC-o próbka4 próbka4.do
$ GCC -o sample4copy sample4copy.do
$ ./przykład4

Jak pisaliśmy wcześniej, słowo „GCC” służy do kompilacji kodu, a po kompilacji kod jest wykonywany pomyślnie.

Zgodnie z obrazem, PID próbki4.Plik c jest pokazywany jako pierwszy, ponieważ został zadeklarowany przed wywołaniem exec. Następnie po wywołaniu funkcji exec() obie instrukcje print pliku sample4copy.c jest wykonywane, gdzie getpid() jest używane do uzyskania identyfikatora procesu.

Kodowanie widelcem w c

Funkcja fork() tworzy proces potomny z procesu nadrzędnego. Zawiera również dwa nagłówki, w tym zawarte w nim informacje o rozwidleniu.

Składnia:

Widelec Pid_t (nieważny);

Możemy skorzystać ze strony podręcznika, aby uzyskać pomoc w użyciu

$ mężczyzna widelec

Przykład: Rozważmy teraz przykład, tworząc plik „sample3.do". Wprowadzimy kod wewnątrz pliku. Zgodnie z kodem ustawiliśmy status widelca jako forkrank.

Próbka3.do

Do zastosowania warunku użyliśmy wyrażenia „if-else”. Zadeklarowano tutaj proste polecenia drukowania, aby pomóc w zrozumieniu koncepcji fork(). Forkrank jest najpierw deklarowany jako 0, a następnie -1. Dzięki fork() są teraz dwa procesy, które działają jednocześnie. Dane wyjściowe można uzyskać za pomocą tego samego kodu, jak w powyższym przykładzie exec.

$ GCC -o przyklad3.do
$./przykład3

Wynik pokazuje, że proces potomny jest wykonywany wcześniej niż rodzic, gdy czekał proces nadrzędny. Funkcja wait implikuje, że powoduje, że funkcja rodzica czeka, dopóki jeden ze wszystkich procesów potomnych nie zostanie zakończony terminate.

Wywołania systemowe Fork i Exec Wspólnie

Tutaj weźmiemy dwa pliki o nazwie „sample1.c” i „próbka2.do". Najpierw otwórz plik sampl1.c i napisz kod, który jest dołączony poniżej na obrazku. Użyliśmy tutaj wywołania systemowego fork(); kiedy proces potomny jest tworzony, p zostanie przypisane z 0. Podczas korzystania z wywołania systemowego exec próbka1.c zostanie zastąpiony przez sample2.do.

Próbka1.do

Próbka2.do

Podobnie jak w przykładach omówionych powyżej, plik sample2 będzie zawierał instrukcje printf. W próbce1.c, pierwsze polecenie drukowania jest wykonywane jako pierwsze, następnie wywoływana jest funkcja fork, gdy p== 0, następnie wykonywana jest część potomna i sample2.plik c zostanie uruchomiony. Dane wyjściowe będą zawierać GCC do skompilowania obu plików. Tutaj przykład nadrzędny1.c id i próbka2.c id jest inne, ponieważ są rodzicem i dzieckiem.

Wniosek

W tym artykule użyliśmy zarówno fork, jak i exec osobno i łącznie, aby łatwo zrozumieć użycie i koncepcję. Mam nadzieję, że ten samouczek zawiera wystarczającą ilość treści, które umożliwią dostęp do eskalacji Twojej wiedzy.

Gry 5 najlepszych gier zręcznościowych dla systemu Linux
5 najlepszych gier zręcznościowych dla systemu Linux
W dzisiejszych czasach komputery to poważne maszyny używane do gier. Jeśli nie możesz uzyskać nowego wysokiego wyniku, będziesz wiedział, o co mi chod...
Gry Bitwa o Wesnoth 1.13.6 Wydanie rozwojowe
Bitwa o Wesnoth 1.13.6 Wydanie rozwojowe
Bitwa o Wesnoth 1.13.6 wydana w zeszłym miesiącu jest szóstą wersją rozwojową w 1.13.Seria x i zapewnia szereg ulepszeń, w szczególności w interfejsie...
Gry Jak zainstalować League Of Legends na Ubuntu 14.04
Jak zainstalować League Of Legends na Ubuntu 14.04
Jeśli jesteś fanem League of Legends, to jest okazja do przetestowania League of Legends. Pamiętaj, że LOL jest obsługiwany w PlayOnLinux, jeśli jeste...