Sistema EXEC Chamada em C

Sistema EXEC Chamada em C
A família executiva tem muitas funções em C. Essas funções C são basicamente usadas para executar um comando do sistema em um processo separado que o programa principal e imprime a saída.

Neste artigo, vou falar sobre a família Exec de funções e mostrar como usar cada uma dessas funções da família EXEC em C. Então vamos começar.

C Funções do sistema na família EXEC:

As famílias da função EXEC são definidas no cabeçalho unistd.h. Então, você deve usar este cabeçalho no programa C, onde deseja usar essas funções.

As funções executivas disponíveis, juntamente com seus parâmetros de função, são fornecidos abaixo:

  • int execl (const char *caminho, const char *arg,…, nulo);
  • int execlp (arquivo const char *, const char *arg,…, null);
  • int Execv (const char *caminho, char *const argv []);
  • int Execvp (Arquivo const char *, char *const argv []);
  • int execle (const char *caminho, const char *arg,…, null, char *const Envp []);
  • int execve (arquivo const char *, char *const argv [], char *const Envp []);

Vamos ver o que cada uma dessas funções faz e como usá -las.

função do sistema execl ():

Na função do sistema execl () segue o caminho do arquivo binário executável (i.e. /bin/ls) como o primeiro e o segundo argumento. Então, os argumentos (eu.e. -LH, /lar) que você deseja passar para o executável seguido por NULO. Em seguida, a função do sistema execl () executa o comando e imprime a saída. Se ocorrer algum erro, Execl () retornará -1. Caso contrário, não retorna nada.

Sintaxe:

int execl (const char *caminho, const char *arg,…, nulo);

Um exemplo da função do sistema EXECL () é dada abaixo:

#incluir
int main (void)
char *binaryPath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/home";
Execl (BinaryPath, BinaryPath, Arg1, Arg2, Nulo);
retornar 0;

Eu corri LS -LH /Home Comando usando função do sistema Execl (). Como você pode ver, o resultado correto é exibido.

função do sistema execlp ():

execl () não usa o CAMINHO variável de ambiente. Portanto, o caminho completo do arquivo executável é necessário para executá -lo com Execl (). execlp () usa a variável de ambiente de caminho. Portanto, se um arquivo ou comando executável estiver disponível no caminho, o comando ou o nome do arquivo é suficiente para executá -lo, o caminho completo não é necessário.

Sintaxe:

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

Podemos reescrever o exemplo EXECL () usando a função Execlp () do sistema da seguinte forma:

#incluir
int main (void)
char *programname = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
Execlp (ProgramName, ProgramName, ARG1, ARG2, NULL);
retornar 0;

Eu só passei o nome do comando ls, Não é o caminho completo /bin/ls. Como você pode ver, obtive a mesma saída de antes.

Função do sistema EXECV ():

Na função Execl (), os parâmetros do arquivo executável são passados ​​para a função como argumentos diferentes. Com o EXECV (), você pode passar todos os parâmetros em uma matriz de terminação nula argv. O primeiro elemento da matriz deve ser o caminho do arquivo executável. Caso contrário, a função Execv () funciona exatamente como a função Execl ().

Sintaxe:

int Execv (const char *caminho, char *const argv []);

Podemos reescrever o exemplo Execl () da seguinte forma:

#incluir
int main (void)
char *binaryPath = "/bin/ls";
char *args [] = binaryPath, "-lh", "/home", null;
Execv (BinaryPath, Args);
retornar 0;

Como você pode ver, estou obtendo a saída correta.

Função do sistema EXECVP ():

Funciona da mesma maneira que a função do sistema EXECV (). Mas, a variável de ambiente do caminho é usada. Portanto, o caminho completo do arquivo executável não é necessário como no Execlp ().

Sintaxe:

int Execvp (Arquivo const char *, char *const argv []);

Podemos reescrever o exemplo Execv () da seguinte forma:

#incluir
int main (void)
char *programname = "ls";
char *args [] = ProgramName, "-lh", "/home", null;
EXECVP (nome do programa, args);
retornar 0;

Como você pode ver, a saída correta é exibida.

função do sistema execle ():

Funciona como Execl (), mas você pode fornecer suas próprias variáveis ​​de ambiente junto com ele. As variáveis ​​de ambiente são passadas como uma matriz Envp. O último elemento do Envp Array deve ser nulo. Todos os outros elementos contêm os pares de valor-chave como string.

Sintaxe:

int execle (const char *caminho, const char *arg,…, null, char *const Envp []);

Um exemplo da função do sistema execle () é dada abaixo:

#incluir
int main (void)
char *binaryPath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo" Visite $ hostname: $ port do seu navegador."";
char *const Env [] = "hostName = www.Linuxhint.com "," porta = 8080 ", null;
execle (BinaryPath, BinaryPath, Arg1, Arg2, Null, Env);
retornar 0;

Passei duas variáveis ​​de ambiente NOME DE ANFITRIÃO e PORTA para a função execle (). Como você pode ver, posso acessá -los a partir do executável /BIN/BASH.

função do sistema execve ():

Assim como Execle (), você pode fornecer suas próprias variáveis ​​de ambiente junto com Execve (). Você também pode passar argumentos como matrizes como você fez no Execv ().

Sintaxe:

int execve (arquivo const char *, char *const argv [], char *const Envp []);

O exemplo Execle () pode ser reescrito da seguinte forma:

#incluir
int main (void)
char *binaryPath = "/bin/bash";
char *const args [] = binaryPath, "-c", "echo" Visite $ hostName: $ PORT
do seu navegador."", NULO;
char *const Env [] = "hostName = www.Linuxhint.com "," porta = 8080 ", null;
execve (BinaryPath, Args, Env);
retornar 0;

Como você pode ver, obtemos a mesma saída que no exemplo execle ().

Então, é assim que você usa a família Exec Function em C para programação do sistema no Linux. Obrigado por ler este artigo.