Kodowanie widelec i exec według przykładu w c

Kodowanie widelec i exec według przykładu 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, istnieje zerowa możliwość wystąpienia więcej niż jednego programu na raz w C. Tylko jedno zadanie może nastąpić w określonym czasie, co oznacza, że ​​nie pozwala na uruchomienie równoczesnych programów. Powoduje to, że czekasz na zakończenie jednego procesu wykonania drugiego. Aby uniknąć tego problemu rozwiązywania problemów, może być konieczne opracowanie programu w dobry sposób, będąc dobrym programistą. Linux Fork () służy do przezwyciężenia oczekiwania i umożliwienia współbieżności w systemie. Pomaga w powielaniu nowego procesu i tworzy nowy, nazywając zduplikowane proces. Nowy proces to proces potomny, a poprzedni nazywa się procesem nadrzędnym.

Podczas gdy funkcja exec () służy do zmiany bieżącego istniejącego programu za pomocą nowego. To zastępowanie odbywa się poprzez wprowadzenie poprawek do zawartości programu lub pliku. Tak więc odmienność między widelcem a Exec polega na tym, że widelec tworzy nowy proces z istniejącego procesu, a Exec służy do zastąpienia istniejącego programu poprzez tworzenie nowego.

Wymagania wstępne

Aby wykonać dowolny program C w systemie Linux, musimy zainstalować na nim kilka warunków wstępnych. Przejdź do terminala za pomocą metody skrótów Ctrl+Alt+T. Teraz napisz następujące polecenia, aby zainstalować strony Man.

$ sudo apt Zainstaluj ManPages-dev

Zainstaluje wszystkie odpowiednie strony.

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

$ sudo apt instal gcc

Kodowanie za pomocą exec w c

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

Składnia

Exec (PathName/File, argv);

Tutaj użyliśmy „unistd.H ”nagłówek, ponieważ zawiera wszystkie informacje o rodzinach funkcji exec.

$ MAN EXEC

Teraz na wyżej cytowanym obrazie możesz obserwować rodzaje exec. To są rodzina funkcji exec. Każdy z nich dotyczy innej funkcji po tej samej bazie „Exec."

Przykład: Teraz, idąc dalej, opiszemy funkcjonalność Exec za pomocą przykładu. Podjęmy jedną funkcję Exec, aby zademonstrować jego działanie, czyli „EXECV.„Po pierwsze, utworzymy dwa pliki z rozszerzeniem„.C.„Po ich utworzeniu napiszemy w nich odpowiednie kody i wykonamy je, aby zobaczyć wynik.

Rozważ nazwę pliku „próbka 4.C". Otwórz go i użyj następującego kodu. W tym kodzie użyliśmy execv w określony sposób cytowany poniżej.

Execv („./próbka4copy ”, args);

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

Próbka 4.C

Przede wszystkim wydrukowaliśmy identyfikator bieżącego procesu. Po drugie, stworzyliśmy tablicę postaci z null na końcu zakończenia. Po trzecie, nazywaliśmy funkcję próbki4copy.

Próbka4copy.C

Kiedy wywoływamy funkcję exec (), obraz procesu jest zmieniany. Poniżej cytowany obraz poniżej pokazuje kod próbki4copy.C.

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

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

$ Gcc-o próbka 4.C
$ Gcc -o próbka 4copy próbka 4Copy.C
$ ./próbka4

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

Według obrazu PID z próbki 4.plik C jest wyświetlany najpierw, ponieważ został zadeklarowany przed połączeniem wykonawczym. Następnie po wywołaniu funkcji exec () oba instrukcje drukowania pliku próbka 4Copy.C jest wykonywane tam, gdzie getpid () jest używany do uzyskania identyfikatora procesu.

Kodowanie widelcem w C

Funkcja Fork () tworzy proces dziecięcy z procesu nadrzędnego. Zawiera również dwa nagłówki, w tym informacje o widowisku.

Składnia:

PID_T Fork (void);

Możemy użyć strony Man w celu pomocy w użyciu

$ Man Fork

Przykład: Teraz rozważ przykład, tworząc plik „próbka3.C". Wprowadzimy kod w pliku. Zgodnie z kodem ustawiliśmy status widelca jako wózek widłowy.

Próbka3.C

Zastosowaliśmy instrukcję „IF-Else” do zastosowania warunku. Zadeklarowane są tutaj proste polecenia drukowania, aby pomóc w zrozumieniu koncepcji Fork (). Forkrank jest najpierw zadeklarowany jako 0, a następnie -1. Z widelcem () istnieją teraz dwa procesy, które działają jednocześnie. Wyjście można uzyskać za pomocą tego samego kodu, jak użyto powyżej w przykładzie Exec.

$ Gcc -o próbka3.C
$./próbka3

Dane wyjściowe pokazuje, że proces dziecka jest wykonywany wcześniej niż rodzic, gdy proces nadrzędny czekał. Funkcja oczekiwania oznacza, że ​​powoduje, że funkcja nadrzędna czeka, chyba że jeden ze wszystkich procesów dziecięcych zostanie zakończony.

Wspieranie systemu widelec i exec wspólnie

Tutaj weźmiemy dwa pliki o nazwie „próbka1.c ”i„ próbka 2.C". Najpierw otwórz plik Sampl1.c i napisz kod dołączony poniżej na obrazie. Użyliśmy tutaj systemu Fork () System; Po utworzeniu procesu dziecka p zostanie przypisany z 0. Podczas korzystania z EXEC System-Call, próbka 1.C zostanie zastąpione próbką2.C.

Próbka 1.C

Próbka 2.C

Podobnie jak w przykładach omówionych powyżej, plik SMARK2 będzie zawierał instrukcje printF w nim. W próbce 1.c, najpierw wykonywane jest pierwsze polecenie drukowania, a następnie funkcja widelca jest wywoływana, gdy p == 0, wówczas część dziecka jest wykonywana i próbka 2.plik C zostanie uruchomiony. Wyjście będzie zawierać GCC w celu skompilowania obu plików. Tutaj próbka nadrzędna 1.c id i próbka 2.c id jest inny, ponieważ są rodzicem i dzieckiem.

Wniosek

W tym artykule wykorzystaliśmy zarówno widelec, jak i exec osobno i zbiorowo, aby łatwo zrozumieć użycie i koncepcję. Mam nadzieję, że ten samouczek zawiera wystarczającą treść, która doprowadzi do dostępu do eskalacji twojej wiedzy.