Wywołanie systemu widelców w c

Wywołanie systemu widelców w c

„Podstawowym celem metody polecenia widelca jest tworzenie jednego lub więcej procesów dziecka; Nowo utworzone procesy dziecka działają jednocześnie z procesem nadrzędnym, który stworzył te procesy dziecięce za pomocą instrukcji widelca. Następne oświadczenie, po którym następuje polecenie widelca, zostanie wykonane przez procesy dziecięce i nadrzędne jednocześnie. Te same rejestry procesora, licznik programu (komputer) i otwierają pliki, które proces nadrzędny jest używany przez proces dziecięcy. Polecenie Fork nie przyjmuje żadnego parametru jako danych wejściowych, ale zwraca wartość całkowitą, korzystając z których możemy łatwo określić, czy dowolne polecenie Fork utworzyło proces potomny."

Poniżej znajduje się lista wartości zwracanych metodą widelca:

  • Ujemna wartość: Proces tworzenia procesu potomnego nie powiodła się.
  • Zero: Proces dziecka, który został właśnie utworzony.
  • Wartość dodatnia: Zwrócone do dzwoniącego lub rodzica o wartości dodatniej. Nowo wygenerowany identyfikator procesu dzieci jest zawarty w wartości.

Należy pamiętać o tym, że Fork jest metodą gwintowania; dlatego, aby zobaczyć wyniki; Musisz uruchomić proces w systemie lokalnym. Polecenie Fork może wymagać określonych plików nagłówka lub biblioteki, takich jak SYS/Type.H i Unistd.H. Musisz skonfigurować system operacyjny oparty na systemie Linux lub UNIX do uruchamiania programu, ponieważ polecenia widelca nie może być używane w środowisku Windows. Najpierw musisz potwierdzić, że kompilator GCC został skonfigurowany w środowisku systemu operacyjnego. Aby to osiągnąć, musimy najpierw uruchomić terminal, a następnie wprowadzić polecenie GCC -Version, która wyświetla informację, że kompilator GCC w wersji 11.2.0 został zainstalowany.

Przed pracą nad fragmentami kodu C powinieneś utrzymać i zaktualizować swój system. Powodem jego aktualizacji jest zaspokojenie nadchodzących problemów związanych z najnowszymi wersjami Linux. Wypróbuj więc poniższe zapytanie „Aktualizacja” i spraw, aby Twój Linux jest aktualny.

Przykład 1

Zacznijmy od najprostszego i najłatwiejszego programu, w którym używamy tylko jednej metody widelec i prostej instrukcji drukowania. Programy wymagały plików nagłówka, które są wymienione w pierwszych trzech wierszach kodu. Metoda Fork () jest wywoływana w linii początkowej głównej metody. Polecenie Fork tworzy proces dziecięcy, który jednocześnie wykonuje poniższą instrukcję. W rezultacie instrukcja drukowania pojawi się dwa razy na ekranie powłoki, gdy program zacznie działać. Zacznijmy pisać polecenie w środowisku Ubuntu. Musimy utworzyć plik za pomocą edytora Nano, ale możesz użyć swojego wyboru. Wpisz poniższe polecenie, aby utworzyć nowy plik:

Nano Forkthread.C

Gdy edytor otwiera plik w trybie edycji, jest on pusty, więc musimy tam wprowadzić kod przed zamknięciem pliku i zapisaniem. Komenda widelca musi być poprzedzona stwierdzeniem wskazującym, że proces dziecka zostanie uruchomiony po tym poleceniu. Po widelcu instrukcja drukowania zostanie uruchomiona dwukrotnie, raz w procesie nadrzędnym, a następnie przez nowo ustanowiony proces dziecięcy. To instrukcja zostanie wykonana tylko raz.

#włączać
#włączać
#włączać
int main ()
printf („przed metodą widelca.\N");
widelec();
printf („utworzony proces dziecka.\N");
powrót 0;

Po uratowaniu i zamknięciu wózka widłowego.plik C, musimy teraz użyć kompilatora GCC do kompilacji plik C i utworzenia pliku wyjściowego za pomocą poniższego polecenia.

GCC Forkthread.C -O Forkthread.na zewnątrz

Plik C zostanie skompilowany przez kompilatora GCC, a wyniki zostaną zapisane na widelcu.plik. Jeśli jednak nie użyjesz flagi -O, kompilator GCC będzie przechowywać dane wyjściowe do a.Plik, który jest jego domyślną nazwą, po kompilacji. Obraz pokazuje, w jaki sposób możemy skompilować plik C za pomocą powyższego polecenia.

Wyniki kompilacji ujawniają, że w naszym kodzie nie było żadnych błędów składniowych ani semantycznych, udowadniając, że został pomyślnie skompilowany i że plik wyjściowy został pomyślnie wygenerowany. Możesz wyświetlić wyniki teraz, gdy plik wyjściowy został wykonany. Po prostu wpisz krótkie polecenie poniżej, aby to osiągnąć:

./Forkthread.na zewnątrz

Przykład 2

W tym przykładzie będziemy policzyć przypadki, w których wykonywane są kawałek kodu zawierającego liczne wiersze (). Musimy napisać wiele metod widelca i zmienić istniejący kod. Powinieneś pamiętać, że liczba uruchamiania kawałka kodu zależy od mocy 2, od liczby napisów widelca została napisana. Na przykład, jeśli instrukcja widelca została napisana trzy razy, kod zostanie wykonany 2^3 = 8 razy. Poniżej znajduje się fragment zaktualizowanego kodu C dla połączenia systemowego widelca.

#włączać
#włączać
#włączać
int main ()
printf („przed metodą widelca.\N");
int i = 0;
widelec();
widelec();
widelec();
printf („Utworzony proces dziecka: [%d] \ n”, i);
i ++;
powrót 0;

W powyższym kodzie istnieją trzy instrukcje widelca, a przed nimi zadeklarowaliśmy zmienną „i” typu liczb całkowitych, która zostanie użyta do śledzenia procesu każdego instrukcji widelca. Ta zmienna zostanie również zwiększona po każdej instrukcji widelca i przed instrukcją zwrotu. Od czasu zmodyfikowania kodu, ponownie skompilijmy go za pomocą kompilatora GCC. Plik wyjściowy jest generowany pomyślnie.

Jak widać, zmienna „i” nie została w żaden sposób zwiększona, ponieważ po instrukcji widelca natychmiast następuje instrukcja drukowania, która drukuje osiem razy, co oznacza, że ​​każda instrukcja widelca zawiera proces, który uruchamia wyżej wymieniony kod jednocześnie i używa tylko jedna kopia programu, uniemożliwiająca odbycie jakiegokolwiek wzrostu w kodzie. Istnieje w sumie osiem osobnych metod drukowania używanych do wydrukowania poniższej wiadomości. Jak widać, nie ma przyrostu. Ponieważ proces dziecka wykonuje tylko jedno polecenie drukowania.

Wniosek

Chodziło o użycie połączenia systemowego C „Fork”. Wypróbowaliśmy różne ilustracje, aby uzyskać różne wyniki i zastosowano różne metody. Jeśli chcesz uzyskać pełny przyczepność na połączeniu systemowym C „Fork”, spróbuj wdrożyć powyższe dwa przykłady na różne sposoby, a możesz iść.