Докато функцията exec () се използва за промяна на текущата съществуваща програма с новата. Тази подмяна се извършва чрез поправки в съдържанието на програма или файл. Така разликата между fork и exec е, че fork създава нов процес от съществуващия процес, а exec се използва за заместване на съществуващата програма, като създава нова.
Предпоставки
За да изпълним всяка програма c на вашата Linux система, трябва да инсталираме някои предпоставки върху нея. Отидете до терминала, като използвате метода за бърз достъп Ctrl + Alt + T. Сега напишете следните команди, за да инсталирате man страниците.
$ sudo apt install manpages-dev
Той ще инсталира всички съответни страници.
Продължавайки напред, за да стартирате програма на Linux, трябва да инсталирате компилатор на код. Това се използва за компилиране на кода и изпълнение. За тази цел ще инсталираме GCC хранилища в нашата система.
$ sudo apt инсталира GCC
Кодиране с exec в c
Тъй като инсталирахме man страниците в Linux, ще използваме следната команда, за да видим описанието по отношение на exec. Основният примерен синтаксис е както следва:
Синтаксис
Exec (име на път / файл, argv);Тук сме използвали „unistd.h ”заглавие, тъй като съдържа цялата информация за семействата на exec функция.
$ man exec
Сега в цитираното по-горе изображение можете да наблюдавате видовете exec. Това са семейството на exec функции. Всеки от тях е за различна функция, следваща една и съща база, „exec.”
Пример: Сега, придвижвайки се по-нататък, ще опишем функционалността на exec с помощта на пример. Ще вземем една функция на exec, за да демонстрираме своята работа, която е „execv.„Първо, ще създадем два файла с разширението на„.° С.”След създаването им ще напишем съответните кодове в тях и ще ги изпълним, за да видим резултата.
Помислете за име на файл „sample4.° С". Моля, отворете го и използвайте следния код. В този код използвахме execv по определен начин, цитиран по-долу.
Execv („./ sample4copy ”, аргументи);Първата част съдържа новия път на директорията, а втората част показва масива от аргументи като параметър, който сме предали.
Проба4.° С
На първо място, отпечатахме идентификатора на текущия процес. На второ място, ние създадохме масив от символи с NULL в края за прекратяването. На трето място, ние извикахме функцията sample4copy.
Sample4copy.° СКогато извикаме функцията exec (), изображението на процеса се променя. По-долу цитираното изображение по-долу показва кода на sample4copy.° С.
Тук използвахме само отпечатъци, за да получим идентификатора на текущия процес.
Изходът на съответните кодове може да бъде получен чрез използване на следните команди.
$ GCC-o проба4 проба4.° С$ GCC -o sample4copy sample4copy.° С
$ ./ проба4
Както описахме по-рано, думата „GCC“ се използва за компилиране на кода и след компилирането кодът се изпълнява успешно.
Според изображението, PID на sample4.c файлът се показва първо, както е деклариран преди извикването на exec. След това, след като бъде извикана функцията exec (), и двете инструкции за печат на файл sample4copy.c се изпълнява, когато getpid () се използва за получаване на идентификатора на процеса.
Кодиране с вилица в c
Функцията fork () създава дъщерния процес от родителския процес. Той също така съдържа две заглавки, включително информацията за вилицата в него.
Синтаксис:
Pid_t вилица (void);Можем да използваме ръководството за помощ при използването
$ човек вилица
Пример: Сега разгледайте пример, като създадете файл „sample3.° С". Ще въведем кода във файла. Според кода сме задали състоянието на вилицата като разклонение.
Проба 3.° С
Използвахме израза „ако-друго“, за да приложим условието. Тук са декларирани прости команди за печат, за да помогнат за разбирането на концепцията fork (). Forkrank първо се декларира като 0 и след това -1. С fork () вече има два процеса, които работят едновременно. Изходът може да бъде получен чрез използване на същия код, както е използван по-горе в пример за изпълнение.
$ GCC -o проба3.° С$./ проба3
Резултатът показва, че дъщерният процес се изпълнява по-рано от родителския, когато родителският процес е чакал. Функцията за изчакване предполага, че тя кара родителската функция да чака, освен ако един от всички дъщерни процеси не бъде прекратен.
Fork и Exec системни обаждания колективно
Тук ще вземем два файла с име „sample1.в ”и„ проба2.° С". Първо отворете файла sampl1.c и напишете кода, който е приложен по-долу в изображението. Тук използвахме системното повикване fork (); когато се създаде дъщерният процес, p ще бъде присвоен с 0. Докато използвате exec system-call, sample1.c ще бъде заменен с sample2.° С.
Проба1.° С
Проба2.° С
Подобно на примерите, обсъдени по-горе, файлът sample2 ще съдържа изявления printf в него. В проба1.c, първата команда за печат се изпълнява първо, след това се извиква функцията fork, когато p == 0, тогава се изпълнява дъщерна част и sample2.c файл ще бъде стартиран. Резултатът ще съдържа GCC за компилиране на двата файла. Тук родителски sample1.c id и sample2.c id е различен, защото те са родител и дете.
Заключение
В тази статия използвахме както fork, така и exec поотделно и колективно, за да разберем лесно употребата и концепцията. Надявам се, че този урок съдържа достатъчно съдържание, което ще доведе до достъп до ескалация на вашите знания.