C Програмиране

Кодиране с fork и exec чрез пример в c

Кодиране с fork и exec чрез пример в c
Заглавието на нашата статия съдържа две различни функции на езика C, които се появяват при стартиране на която и да е програма в нашата система. За съжаление, няма вероятност да се появят повече от една програма наведнъж в C. В даден момент може да се случи само една задача, което означава, че не позволява изпълнението на едновременни програми. Това ви кара да изчакате завършването на единия процес, за да изпълните другия. За да избегнете този проблем за отстраняване на неизправности, може да се наложи да разработите програмата си по добър начин, като сте добър разработчик. Linux fork () се използва за преодоляване на чакането и за разрешаване на паралелност във вашата система. Той помага при дублирането на нов процес и създава нов чрез извикване на дублирания процес. Новият процес е дъщерният процес, а предишният се нарича родителски процес.

Докато функцията 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 поотделно и колективно, за да разберем лесно употребата и концепцията. Надявам се, че този урок съдържа достатъчно съдържание, което ще доведе до достъп до ескалация на вашите знания.

Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...
Пристанища с отворен код на търговски игрални машини
Безплатни разширения на играта с отворен код и междуплатформени игри могат да се използват за възпроизвеждане на стари, както и някои от доста скорошн...
Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...