Wywołanie systemu EXEC w c

Wywołanie systemu EXEC w c
Rodzina Exec ma wiele funkcji w C. Te funkcje C są zasadniczo używane do uruchamiania polecenia systemowego w osobnym procesie, że główny program i drukowanie danych wyjściowych.

W tym artykule mówię o rodzinie funkcji Exec i pokazuję, jak korzystać z każdej z tych funkcji rodzinnych w C. Więc zacznijmy.

C Funkcje systemowe w Exec Family:

Rodziny funkcji exec są zdefiniowane w nagłówku unistd.H. Musisz więc użyć tego nagłówka w programie C, w którym chcesz korzystać z tych funkcji.

Dostępne funkcje EXEC wraz z ich parametrami funkcji podano poniżej:

  • int execl (const char *ścieżka, const char *arg,…, null);
  • int execlp (const char *plik, const char *arg,…, null);
  • int execv (const char *ścieżka, char *const argv []);
  • int execvp (const char *plik, char *const argv []);
  • int execle (const char *ścieżka, const char *arg,…, null, char *const envP []);
  • int execve (const char *plik, char *const argv [], char *const envP []);

Zobaczmy, co robi każda z tych funkcji i jak z nich korzystać.

execl () Funkcja systemowa:

W funkcji systemowej execl () przebiega ścieżka pliku binarnego wykonywalnego (i.mi. /bin/ls) jako pierwszy i drugi argument. Następnie argumenty (ja.mi. -LH, /dom) że chcesz przejść do elementu wykonywalnego, a następnie ZERO. Następnie funkcja systemu execl () uruchamia polecenie i drukuje wyjście. Jeśli wystąpi jakikolwiek błąd, execl () zwraca -1. W przeciwnym razie nic nie zwraca.

Składnia:

int execl (const char *ścieżka, const char *arg,…, null);

Przykład funkcji systemowej execl () podano poniżej:

#włączać
int main (void)
char *binarypath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/home";
Execl (Binarypath, Binarypath, Arg1, Arg2, Null);
powrót 0;

Prowadziłem ls -lh /dom Polecenie za pomocą funkcji systemowej execl (). Jak widać, wyświetlany jest prawidłowy wynik.

funkcja systemu execlp ():

execl () nie używa ŚCIEŻKA Zmienna środowiskowa. Tak więc pełna ścieżka pliku wykonywalnego jest wymagana do uruchomienia go z execl (). execlp () używa zmiennej środowiska ścieżki. Tak więc, jeśli plik wykonywalny lub polecenie jest dostępne na ścieżce, polecenie lub nazwa pliku wystarczy, aby go uruchomić, pełna ścieżka nie jest potrzebna.

Składnia:

int execlp (const char *plik, const char *arg,…, null);

Możemy przepisać przykład execl () za pomocą funkcji systemu execlp () w następujący sposób:

#włączać
int main (void)
char *programu = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
execlp (nazwa programu, nazwa programu, arg1, arg2, null);
powrót 0;

Przekazałem tylko nazwę polecenia LS, nie pełna ścieżka /bin/ls. Jak widać, mam takie samo wyjście, jak poprzednio.

EXECV () Funkcja systemowa:

W funkcji execl () parametry pliku wykonywalnego są przekazywane do funkcji jako różne argumenty. Za pomocą execV () możesz przekazać wszystkie parametry w zerowej tablicy zakończonej Argv. Pierwszym elementem tablicy powinien być ścieżka pliku wykonywalnego. W przeciwnym razie funkcja execV () działa tak samo jak funkcja execl ().

Składnia:

int execv (const char *ścieżka, char *const argv []);

Możemy przepisać przykład execl () w następujący sposób:

#włączać
int main (void)
char *binarypath = "/bin/ls";
char *args [] = binarypath, „-lh”, „/home”, null;
EXECV (Binarypath, args);
powrót 0;

Jak widać, otrzymuję prawidłowe wyjście.

EXECVP () Funkcja systemowa:

Działa w taki sam sposób, jak funkcja systemu execv (). Ale stosuje się zmienną środowiskową ścieżki. Tak więc pełna ścieżka pliku wykonywalnego nie jest wymagana, tak jak w execlp ().

Składnia:

int execvp (const char *plik, char *const argv []);

Możemy przepisać przykład execV () w następujący sposób:

#włączać
int main (void)
char *programu = "ls";
char *args [] = program, „-lh”, „/home”, null;
execvp (program programu, args);
powrót 0;

Jak widać, wyświetlane jest prawidłowe wyjście.

EXECLE () Funkcja systemowa:

Działa tak jak Execl (), ale możesz podać własne zmienne środowiskowe wraz z tym. Zmienne środowiskowe są przekazywane jako tablica Envp. Ostatni element Envp tablica powinna być null. Wszystkie pozostałe elementy zawierają pary wartości kluczowej jako ciąg.

Składnia:

int execle (const char *ścieżka, const char *arg,…, null, char *const envP []);

Przykład funkcji systemowej execle () podano poniżej:

#włączać
int main (void)
char *binarypath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo" Odwiedź $ hostName: $ port z przeglądarki."";
char *const env [] = "nazwa hosta = www.Linuxhint.com "," port = 8080 ", null;
Execle (Binarypath, Binarypath, Arg1, Arg2, Null, Env);
powrót 0;

Miałem dwie zmienne środowiskowe Nazwa hosta I PORT do funkcji execle (). Jak widać, mogę uzyskać do nich dostęp z wykonywalny /bin/bash.

Execve () Funkcja systemowa:

Podobnie jak execle () możesz dostarczyć własne zmienne środowiskowe wraz z execve (). Możesz także przekazać argumenty jako tablice, tak jak w ExecV ().

Składnia:

int execve (const char *plik, char *const argv [], char *const envP []);

Przykład execle () można przepisać w następujący sposób:

#włączać
int main (void)
char *binarypath = "/bin/bash";
char *const args [] = binarypath, „-c”, „echo” odwiedź $ hostName: $ port
z Twojej przeglądarki."", ZERO;
char *const env [] = "nazwa hosta = www.Linuxhint.com "," port = 8080 ", null;
Execve (Binarypath, args, env);
powrót 0;

Jak widać, otrzymujemy to samo wyjście, co w przykładzie execle ().

Tak więc używasz rodziny funkcji exec w C do programowania systemu w Linux. Dziękujemy za przeczytanie tego artykułu.