Tässä artikkelissa aion puhua exec -funktioperheestä ja näyttää, kuinka voit käyttää kutakin näistä exec -perheen funktioista C. Joten aloitetaan.
C Exec -perheen järjestelmän toiminnot:
Suoritusfunktioperheet määritellään otsikossa tunnistamaton. h . Sinun on siis käytettävä tätä otsikkoa C -ohjelmassa, jossa haluat käyttää näitä toimintoja.
Käytettävissä olevat suoritustoiminnot ja niiden parametrit on lueteltu alla:
- int execl (const char *polku, const char *arg,…, NULL);
- int execlp (const char *tiedosto, const char *arg,…, NULL);
- int execv (const char *polku, char *const argv []);
- int execvp (const char *tiedosto, char *const argv []);
- int execle (const char *polku, const char *arg,…, NULL, char *const envp []);
- int execve (const char *tiedosto, char *const argv [], char *const envp []);
Katsotaanpa, mitä kukin näistä toiminnoista tekee ja miten niitä käytetään.
execl () Järjestelmän toiminto:
In execl () järjestelmätoiminto kulkee suoritettavan binaaritiedoston polun (eli / bin / ls ) ensimmäisenä ja toisena argumenttina. Sitten argumentit (esim. -lh , /Koti ), jonka haluat siirtää suoritettavaan tiedostoon ja jota seuraa TYHJÄ . Sitten execl () -toiminto suorittaa komennon ja tulostaa tuloksen. Jos tapahtuu virhe, execl () palauttaa -1. Muuten se ei palauta mitään.
Syntaksi:
intsuoritus(const hiiltyä *polku, const hiiltyä *vihainen,...,TYHJÄ);Alla on esimerkki execl () -toiminnosta:
#sisältää
inttärkein(mitätön) {
hiiltyä *binaryPath= ' / bin / ls';
hiiltyä *arg1= '' lh '';
hiiltyä *arg2= '/Koti';
suoritus(binaryPath,binaryPath,arg1,arg2,TYHJÄ);
palata 0;
}
Juoksin ls -lh / koti komento execl () -toimintoa käyttäen. Kuten näette, oikea tulos näytetään.
execlp () Järjestelmän toiminto:
execl () ei käytä PATH ympäristömuuttuja. Joten suoritettavan tiedoston koko polku vaaditaan sen suorittamiseen execl (): n kanssa. execlp () käyttää PATH -ympäristömuuttujaa. Joten jos suoritettava tiedosto tai komento on käytettävissä PATH: ssa, komento tai tiedostonimi riittää sen suorittamiseen, koko polkua ei tarvita.
Syntaksi:
intexeclp(const hiiltyä *tiedosto, const hiiltyä *vihainen,...,TYHJÄ);Voimme kirjoittaa esimerkin execl () uudelleen käyttämällä execlp () -järjestelmätoimintoa seuraavasti:
#sisältääinttärkein(mitätön) {
hiiltyä *ohjelmanNimi= 'on';
hiiltyä *arg1= '' lh '';
hiiltyä *arg2= '/Koti';
execlp(ohjelmanNimi,ohjelmanNimi,arg1,arg2,TYHJÄ);
palata 0;
}
Välitin vain komennon nimen ls , ei koko polku / bin / ls . Kuten näette, sain saman tuloksen kuin ennen.
execv () Järjestelmän toiminto:
Funktiossa execl () suoritettavan tiedoston parametrit välitetään funktiolle eri argumentteina. Execv (): n avulla voit välittää kaikki parametrit NULL -päätteisessä taulukossa argv . Taulukon ensimmäisen elementin tulisi olla suoritettavan tiedoston polku. Muussa tapauksessa execv () -toiminto toimii kuten execl () -toiminto.
Syntaksi:
intexecv(const hiiltyä *polku, hiiltyä *constargv[]);Voimme kirjoittaa esimerkin execl () uudelleen seuraavasti:
#sisältääinttärkein(mitätön) {
hiiltyä *binaryPath= ' / bin / ls';
hiiltyä *args[] = {binaryPath, '' lh '', '/Koti',TYHJÄ};
execv(binaryPath,args);
palata 0;
}
Kuten näette, saan oikean tuloksen.
execvp () Järjestelmän toiminto:
Toimii samalla tavalla kuin execv () -järjestelmätoiminto. PATH -ympäristömuuttujaa käytetään kuitenkin. Joten suoritettavan tiedoston koko polkua ei vaadita aivan kuten execlp ().
Syntaksi:
intexecvp(const hiiltyä *tiedosto, hiiltyä *constargv[]);Voimme kirjoittaa esimerkin execv () uudelleen seuraavasti:
#sisältääinttärkein(mitätön) {
hiiltyä *ohjelmanNimi= 'on';
hiiltyä *args[] = {ohjelmanNimi, '' lh '', '/Koti',TYHJÄ};
execvp(ohjelmanNimi,args);
palata 0;
}
Kuten näette, oikea lähtö näytetään.
execle () Järjestelmän toiminto:
Toimii kuten execl (), mutta voit antaa omat ympäristömuuttujasi sen mukana. Ympäristömuuttujat välitetään matriisina envp . Viimeinen elementti envp taulukon pitäisi olla NULL. Kaikki muut elementit sisältävät avain-arvo-parit merkkijonona.
Syntaksi:
intexecle(const hiiltyä *polku, const hiiltyä *vihainen,...,TYHJÄ, hiiltyä * constenvp[] );Alla on esimerkki execle () -toiminnosta:
#sisältääinttärkein(mitätön) {
hiiltyä *binaryPath= '/bin/bash';
hiiltyä *arg1= '' c '';
hiiltyä *arg2= 'heitti pois 'Käy osoitteessa $ HOSTNAME:$ PORT selaimestasi.'';
hiiltyä *constenv[] = {'HOSTNAME = www.linuxhint.com', 'SATAMA = 8080',TYHJÄ};
execle(binaryPath,binaryPath,arg1,arg2,TYHJÄ,env);
palata 0;
}
Ohitin kaksi ympäristömuuttujaa Isäntä ja SATAMA execle () -toimintoon. Kuten näette, voin käyttää niitä suoritettavasta tiedostosta /bin/bash .
execve () Järjestelmän toiminto:
Aivan kuten execle (), voit antaa omat ympäristömuuttujasi yhdessä execve (): n kanssa. Voit myös välittää argumentteja matriiseina kuten suorittimessa execv ().
Syntaksi:
intsuorittaa(const hiiltyä *tiedosto, hiiltyä *constargv[], hiiltyä *constenvp[]);Esimerkki execle () voidaan kirjoittaa uudelleen seuraavasti:
#sisältääinttärkein(mitätön) {
hiiltyä *binaryPath= '/bin/bash';
hiiltyä *constargs[] = {binaryPath, '' c '', 'heitti pois 'Käy osoitteessa $ HOSTNAME:$ PORT
selaimestasi.'',TYHJÄ};
hiiltyä *constenv[] = {'HOSTNAME = www.linuxhint.com', 'SATAMA = 8080',TYHJÄ};
suorittaa(binaryPath,args,env);
palata 0;
}
Kuten näette, saamme saman tuloksen kuin esimerkissä execle ().
Käytät siis C: n exec -funktioperhettä järjestelmän ohjelmointiin Linuxissa. Kiitos tämän artikkelin lukemisesta.