Selles artiklis räägin funktsioonide perekonnast exec ja näitan teile, kuidas kasutada kõiki neid exec perekonna funktsioone C -s. Alustame siis.
C Süsteemi funktsioonid Exec perekonnas:
Täitmisfunktsioonide perekonnad on määratletud päises unistd.h . Niisiis, peate seda päist kasutama C -programmis, kus soovite neid funktsioone kasutada.
Saadaolevad täitmisfunktsioonid koos nende funktsiooniparameetritega on toodud allpool:
- int execl (const char *tee, const char *arg,…, NULL);
- int execlp (const char *fail, const char *arg,…, NULL);
- int execv (const char *tee, char *const argv []);
- int execvp (const char *fail, char *const argv []);
- int execle (const char *tee, const char *arg,…, NULL, char *const envp []);
- int execve (const char *fail, char *const argv [], char *const envp []);
Vaatame, mida kõik need funktsioonid teevad ja kuidas neid kasutada.
execl () Süsteemi funktsioon:
Süsteemifunktsioon execl () valib käivitatava binaarfaili (st. / bin / ls ) esimese ja teise argumendina. Seejärel argumendid (st. -lh , /Kodu ), mille soovite edastatavale failile edastada NULL . Seejärel käivitab süsteemifunktsioon execl () käsu ja prindib väljundi. Kui ilmneb tõrge, tagastab execl () -1. Vastasel juhul ei anna see midagi tagasi.
Süntaks:
inttäit(const süsi *tee, const süsi *vihane,...,NULL);Süsteemi funktsiooni execl () näide on toodud allpool:
#kaasake
intpeamine(tühine) {
süsi *binaryPath= ' / bin / ls';
süsi *arg1= '-lh';
süsi *arg2= '/Kodu';
täit(binaryPath,binaryPath,arg1,arg2,NULL);
tagasi 0;
}
Ma jooksin ls -lh / koju käsk süsteemifunktsiooni execl () abil. Nagu näete, kuvatakse õige tulemus.
execlp () Süsteemi funktsioon:
execl () ei kasuta RADA keskkonnamuutuja. Seega on käivitatava faili täielik tee selle käivitamiseks käsuga execl (). execlp () kasutab keskkonnamuutujat PATH. Seega, kui käivitatav fail või käsk on PATH -is saadaval, siis käsk või failinimi on selle käivitamiseks piisav, täielikku teed pole vaja.
Süntaks:
intexeclp(const süsi *faili, const süsi *vihane,...,NULL);Saame näite execl () ümber kirjutada, kasutades süsteemi funktsiooni execlp () järgmiselt:
#kaasakeintpeamine(tühine) {
süsi *programmiNimi= 'on';
süsi *arg1= '-lh';
süsi *arg2= '/Kodu';
execlp(programmiNimi,programmiNimi,arg1,arg2,NULL);
tagasi 0;
}
Andsin edasi ainult käsu nime ls , mitte kogu tee / bin / ls . Nagu näete, sain sama väljundi nagu varem.
execv () Süsteemi funktsioon:
Funktsioonis execl () edastatakse käivitatava faili parameetrid funktsioonile erinevate argumentidena. Rakendusega execv () saate edastada kõik parameetrid NULL -lõppenud massiivis argv . Massiivi esimene element peaks olema käivitatava faili tee. Vastasel korral toimib execv () funktsioon täpselt nagu execl ().
Süntaks:
intexecv(const süsi *tee, süsi *constargv[]);Näite execl () saame ümber kirjutada järgmiselt:
#kaasakeintpeamine(tühine) {
süsi *binaryPath= ' / bin / ls';
süsi *args[] = {binaryPath, '-lh', '/Kodu',NULL};
execv(binaryPath,args);
tagasi 0;
}
Nagu näete, saan õige väljundi.
execvp () Süsteemi funktsioon:
Töötab samamoodi nagu execv () süsteemifunktsioon. Kuid kasutatakse keskkonnamuutujat PATH. Seega ei nõuta käivitatava faili täielikku teed just nagu execlp ().
Süntaks:
intexecvp(const süsi *faili, süsi *constargv[]);Näite execv () saame ümber kirjutada järgmiselt:
#kaasakeintpeamine(tühine) {
süsi *programmiNimi= 'on';
süsi *args[] = {programmiNimi, '-lh', '/Kodu',NULL};
execvp(programmiNimi,args);
tagasi 0;
}
Nagu näete, kuvatakse õige väljund.
execle () Süsteemi funktsioon:
Töötab täpselt nagu execl (), kuid saate koos sellega esitada ka oma keskkonnamuutujad. Keskkonnamuutujad edastatakse massiivina envp . Viimane element envp massiiv peaks olema NULL. Kõik muud elemendid sisaldavad stringina võtme-väärtuse paare.
Süntaks:
inteksiil(const süsi *tee, const süsi *vihane,...,NULL, süsi * constenvp[] );Allpool on näide süsteemi funktsioonist execle ():
#kaasakeintpeamine(tühine) {
süsi *binaryPath= '/bin/bash';
süsi *arg1= '-c';
süsi *arg2= 'viskas välja 'Külastage veebisaiti $ HOSTNAME:$ PORT oma brauserist.'';
süsi *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};
eksiil(binaryPath,binaryPath,arg1,arg2,NULL,env);
tagasi 0;
}
Läbisin kaks keskkonnamuutujat HOSTNAME ja SADAM funktsioonile execle (). Nagu näete, saan neile juurdepääsu käivitatava faili kaudu /bin/bash .
execve () Süsteemi funktsioon:
Nii nagu execle (), saate koos execve () -ga esitada ka oma keskkonnamuutujad. Argumente saate edastada ka massiividena, nagu tegite käsuga execv ().
Süntaks:
inttäitma(const süsi *faili, süsi *constargv[], süsi *constenvp[]);Näite execle () saab ümber kirjutada järgmiselt:
#kaasakeintpeamine(tühine) {
süsi *binaryPath= '/bin/bash';
süsi *constargs[] = {binaryPath, '-c', 'viskas välja 'Külastage veebisaiti $ HOSTNAME:$ PORT
oma brauserist.'',NULL};
süsi *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};
täitma(binaryPath,args,env);
tagasi 0;
}
Nagu näete, saame sama väljundi nagu näites execle ().
Niisiis, kasutate C -s täitmisfunktsioonide perekonda Linuxi süsteemide programmeerimiseks. Täname, et lugesite seda artiklit.