Exec System Call i C

Exec System Call C



Exec -familjen har många funktioner i C. Dessa C -funktioner används i princip för att köra ett systemkommando i en separat process som huvudprogrammet och skriver ut utdata.

I den här artikeln kommer jag att prata om exec -familjen av funktioner och visa dig hur du använder var och en av dessa exec -familjefunktioner i C. Så, låt oss komma igång.







C Systemfunktioner i Exec -familjen:

Exec -funktionsfamiljerna definieras i rubriken unistd.h . Så du måste använda denna rubrik i C -programmet där du vill använda dessa funktioner.



De tillgängliga exec -funktionerna tillsammans med deras funktionsparametrar ges nedan:



  • int execl (const char *path, const char *arg, ..., NULL);
  • int execlp (const char *fil, const char *arg, ..., NULL);
  • int execv (const char *path, char *const argv []);
  • int execvp (const char *fil, char *const argv []);
  • int execle (const char *path, const char *arg,…, NULL, char *const envp []);
  • int execve (const char *file, char *const argv [], char *const envp []);

Låt oss se vad var och en av dessa funktioner gör och hur man använder dem.





execl () Systemfunktion:

I execl () tar systemfunktionen vägen till den körbara binära filen (dvs. / bin / ls ) som det första och andra argumentet. Sedan kommer argumenten (dvs. -lh , /Hem ) som du vill skicka till den körbara filen följt av NULL . Därefter kör execl () systemfunktionen kommandot och skriver ut utmatningen. Om något fel uppstår returnerar execl () -1. Annars returnerar det ingenting.

Syntax:

intexecl(konst röding *väg, konst röding *arg,...,NULL);

Ett exempel på execl () systemfunktionen ges nedan:



#omfatta

inthuvud(tomhet) {
röding *binaryPath= ' / bin / ls';
röding *arg1= '-lh';
röding *arg2= '/Hem';

execl(binaryPath,binaryPath,arg1,arg2,NULL);

lämna tillbaka 0;
}

Jag sprang ls -lh / hem kommando med systemfunktionen execl (). Som du kan se visas rätt resultat.

execlp () Systemfunktion:

execl () använder inte VÄG miljöfaktor. Så, den fullständiga sökvägen för den körbara filen krävs för att köra den med execl (). execlp () använder miljövariabeln PATH. Så om en körbar fil eller kommando är tillgängligt i PATH, då är kommandot eller filnamnet tillräckligt för att köra det, hela vägen behövs inte.

Syntax:

intexeclp(konst röding *fil, konst röding *arg,...,NULL);

Vi kan skriva om execl () -exemplet med hjälp av execlp () -funktionen enligt följande:

#omfatta

inthuvud(tomhet) {
röding *Program namn= 'ls';
röding *arg1= '-lh';
röding *arg2= '/Hem';

execlp(Program namn,Program namn,arg1,arg2,NULL);

lämna tillbaka 0;
}

Jag passerade bara kommandonamnet ls , inte hela vägen / bin / ls . Som ni ser fick jag samma output som tidigare.

execv () Systemfunktion:

I funktionen execl () skickas parametrarna för den körbara filen till funktionen som olika argument. Med execv () kan du skicka alla parametrar i en NULL -avslutad array argv . Det första elementet i matrisen bör vara sökvägen till den körbara filen. Annars fungerar execv () -funktionen precis som execl () -funktionen.

Syntax:

intexecv(konst röding *väg, röding *konstargv[]);

Vi kan skriva om execl () -exemplet enligt följande:

#omfatta

inthuvud(tomhet) {
röding *binaryPath= ' / bin / ls';
röding *args[] = {binaryPath, '-lh', '/Hem',NULL};

execv(binaryPath,args);

lämna tillbaka 0;
}

Som du kan se får jag rätt utmatning.

execvp () Systemfunktion:

Fungerar på samma sätt som execv () systemfunktion. Men PATH -miljövariabeln används. Så den fullständiga sökvägen för den körbara filen krävs inte precis som i execlp ().

Syntax:

intexecvp(konst röding *fil, röding *konstargv[]);

Vi kan skriva om execv () -exemplet enligt följande:

#omfatta

inthuvud(tomhet) {
röding *Program namn= 'ls';
röding *args[] = {Program namn, '-lh', '/Hem',NULL};

execvp(Program namn,args);

lämna tillbaka 0;
}

Som du kan se visas rätt utmatning.

execle () Systemfunktion:

Fungerar precis som execl () men du kan tillhandahålla dina egna miljövariabler tillsammans med den. Miljövariablerna skickas som en array envp . Det sista elementet i envp array ska vara NULL. Alla andra element innehåller nyckel-värdepar som sträng.

Syntax:

intexecle(konst röding *väg, konst röding *arg,...,NULL, röding * konstenvp[] );

Ett exempel på execle () systemfunktionen ges nedan:

#omfatta

inthuvud(tomhet) {
röding *binaryPath= '/bin/bash';
röding *arg1= '-c';
röding *arg2= 'kastade ut 'Besök $ HOSTNAME:$ PORT från din webbläsare.'';
röding *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

execle(binaryPath,binaryPath,arg1,arg2,NULL,env);

lämna tillbaka 0;
}

Jag klarade två miljövariabler HOSTNAME och HAMN till execle () -funktionen. Som du kan se kan jag komma åt dem från den körbara filen /bin/bash .

execve () Systemfunktion:

Precis som execle () kan du tillhandahålla dina egna miljövariabler tillsammans med execve (). Du kan också skicka argument som matriser som du gjorde i execv ().

Syntax:

intexecve(konst röding *fil, röding *konstargv[], röding *konstenvp[]);

Execle () -exemplet kan skrivas om enligt följande:

#omfatta

inthuvud(tomhet) {
röding *binaryPath= '/bin/bash';
röding *konstargs[] = {binaryPath, '-c', 'kastade ut 'Besök $ HOSTNAME:$ PORT
från din webbläsare.'',NULL};
röding *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

execve(binaryPath,args,env);

lämna tillbaka 0;
}

Som du kan se får vi samma output som i execle () -exemplet.

Så det är så du använder exec -funktionsfamiljen i C för systemprogrammering i Linux. Tack för att du läste denna artikel.