Извршите системски позив у Ц.

Exec System Call C



Породица екец има много функција у Ц. Ове Ц функције се у основи користе за покретање системске команде у засебном процесу који главни програм и штампа излаз.

У овом чланку ћу говорити о породици функција екец и показати вам како да користите сваку од ових функција породице екец у Ц. Дакле, почнимо.







Ц Системске функције у породици Екец:

Породице екец функција су дефинисане у заглављу унистд.х . Дакле, морате користити ово заглавље у програму Ц где желите да користите ове функције.



Доступне екец функције заједно са параметрима функција дате су испод:



  • инт екецл (цонст цхар *путања, цонст цхар *арг,…, НУЛЛ);
  • инт екецлп (цонст цхар *датотека, цонст цхар *арг,…, НУЛЛ);
  • инт екецв (цонст цхар *путања, цхар *цонст аргв []);
  • инт екецвп (цонст цхар *датотека, цхар *цонст аргв []);
  • инт екецле (цонст цхар *путања, цонст цхар *арг,…, НУЛЛ, цхар *цонст енвп []);
  • инт екецве (цонст цхар *датотека, цхар *цонст аргв [], цхар *цонст енвп []);

Погледајмо шта свака од ових функција ради и како их користити.





екецл () Системска функција:

У екецл () системска функција води путању извршне бинарне датотеке (тј. / бин / лс ) као први и други аргумент. Затим, аргументи (тј. -лх , /кућа ) коју желите да пренесете у извршну датотеку, а затим НУЛА . Затим системска функција екецл () покреће наредбу и штампа излаз. Ако дође до грешке, екецл () враћа -1. У супротном, ништа не враћа.

Синтакса:

интекецл(цонст цхар *пут, цонст цхар *љут,...,НУЛА);

Пример системске функције екецл () дат је испод:



#инцлуде

интглавни(празнина) {
цхар *бинариПатх= ' / бин / лс';
цхар *арг1= '-лх';
цхар *арг2= '/кућа';

екецл(бинариПатх,бинариПатх,арг1,арг2,НУЛА);

повратак 0;
}

Ја сам водио лс -лх / хоме команда помоћу системске функције екецл (). Као што видите, приказује се тачан резултат.

екецлп () Системска функција:

екецл () не користи ПАТХ променљива окружења. Дакле, пуна путања извршне датотеке је потребна за њено покретање са екецл (). екецлп () користи променљиву окружења ПАТХ. Дакле, ако је извршна датотека или команда доступна у ПАТХ -у, онда је команда или назив датотеке довољна за њено покретање, пуна путања није потребна.

Синтакса:

интекецлп(цонст цхар *филе, цонст цхар *љут,...,НУЛА);

Пример екецл () можемо преписати помоћу системске функције екецлп () на следећи начин:

#инцлуде

интглавни(празнина) {
цхар *програмНаме= 'лс';
цхар *арг1= '-лх';
цхар *арг2= '/кућа';

екецлп(програмНаме,програмНаме,арг1,арг2,НУЛА);

повратак 0;
}

Прошао сам само име команде лс , а не пуни пут / бин / лс . Као што видите, добио сам исти излаз као и раније.

екецв () Системска функција:

У функцији екецл () параметри извршне датотеке се преносе у функцију као различити аргументи. Помоћу екецв () можете проследити све параметре у НУЛЛ низу са завршетком аргв . Први елемент низа треба да буде путања извршне датотеке. Иначе, екецв () функција ради исто као екецл () функција.

Синтакса:

интекецв(цонст цхар *пут, цхар *цонстаргв[]);

Пример екецл () можемо преписати на следећи начин:

#инцлуде

интглавни(празнина) {
цхар *бинариПатх= ' / бин / лс';
цхар *аргс[] = {бинариПатх, '-лх', '/кућа',НУЛА};

екецв(бинариПатх,аргс);

повратак 0;
}

Као што видите, добијам исправан излаз.

екецвп () Системска функција:

Ради на исти начин као и системска функција екецв (). Али, користи се променљива окружења ПАТХ. Дакле, пуна путања извршне датотеке није потребна баш као у екецлп ().

Синтакса:

интекецвп(цонст цхар *филе, цхар *цонстаргв[]);

Пример екецв () можемо преписати на следећи начин:

#инцлуде

интглавни(празнина) {
цхар *програмНаме= 'лс';
цхар *аргс[] = {програмНаме, '-лх', '/кућа',НУЛА};

екецвп(програмНаме,аргс);

повратак 0;
}

Као што видите, приказује се исправан излаз.

екецле () Системска функција:

Ради исто као екецл (), али уз њега можете навести и сопствене променљиве окружења. Променљиве окружења се прослеђују као низ енвп . Последњи елемент енвп низ треба да буде НУЛЛ. Сви остали елементи садрже парове кључ / вредност као низ.

Синтакса:

интекецле(цонст цхар *пут, цонст цхар *љут,...,НУЛА, цхар * цонстенвп[] );

Пример системске функције екецле () дат је испод:

#инцлуде

интглавни(празнина) {
цхар *бинариПатх= '/бин/басх';
цхар *арг1= '-ц';
цхар *арг2= 'Избацио 'Посетите $ ХОСТНАМЕ:$ ПОРТ из прегледача.'';
цхар *цонстенв[] = {'ХОСТНАМЕ = ввв.линукхинт.цом', 'ПОРТ = 8080',НУЛА};

екецле(бинариПатх,бинариПатх,арг1,арг2,НУЛА,енв);

повратак 0;
}

Прошао сам две променљиве окружења ХОСТНАМЕ и ЛУКА на функцију екецле (). Као што видите, могу им приступити из извршне датотеке /бин/басх .

екецве () Системска функција:

Баш као екецле (), можете дати и сопствене променљиве окружења заједно са екецве (). Такође можете проследити аргументе као низове као у екецв ().

Синтакса:

интекецве(цонст цхар *филе, цхар *цонстаргв[], цхар *цонстенвп[]);

Пример екецле () може се преписати на следећи начин:

#инцлуде

интглавни(празнина) {
цхар *бинариПатх= '/бин/басх';
цхар *цонстаргс[] = {бинариПатх, '-ц', 'Избацио 'Посетите $ ХОСТНАМЕ:$ ПОРТ
из прегледача.'',НУЛА};
цхар *цонстенв[] = {'ХОСТНАМЕ = ввв.линукхинт.цом', 'ПОРТ = 8080',НУЛА};

екецве(бинариПатх,аргс,енв);

повратак 0;
}

Као што видите, добијамо исти излаз као у примеру екецле ().

Дакле, тако користите породицу екец функција у Ц за системско програмирање у Линуку. Хвала што сте прочитали овај чланак.