Käivitage süsteemikõne C -s

Exec System Call C



Exec -perekonnal on C -s palju funktsioone. Neid C -funktsioone kasutatakse põhimõtteliselt süsteemi käsu käivitamiseks eraldi protsessina, milleks on põhiprogramm ja väljundi printimiseks.

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:

#kaasake

intpeamine(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:

#kaasake

intpeamine(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:

#kaasake

intpeamine(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 ():

#kaasake

intpeamine(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:

#kaasake

intpeamine(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.