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.