Programação C

Exec System Call em C

Exec System Call em C
A família exec tem muitas funções em C. Essas funções C são basicamente usadas para executar um comando do sistema em um processo separado do programa principal e imprimir a saída.

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

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

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

As funções exec disponíveis junto com seus parâmetros de função são fornecidas abaixo:

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

execl () Função do sistema:

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

Sintaxe:

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

Um exemplo da função de sistema execl () é fornecido abaixo:

#incluir
 
int main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
 
execl (binaryPath, binaryPath, arg1, arg2, NULL);
 
return 0;

Eu corri o ls -lh / home comando usando a função de sistema execl (). Como você pode ver, o resultado correto é exibido.

execlp () Função do sistema:

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 PATH. Portanto, se um arquivo executável ou comando estiver disponível no PATH, o comando ou nome do arquivo é suficiente para executá-lo, o caminho completo não é necessário.

Sintaxe:

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

Podemos reescrever o exemplo execl () usando a função do sistema execlp () da seguinte maneira:

#incluir
 
int main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
 
execlp (nomedoprograma, nomedoprograma, arg1, arg2, NULL);
 
return 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.

execv () Função do sistema:

Na função execl (), os parâmetros do arquivo executável são passados ​​para a função como argumentos diferentes. Com execv (), você pode passar todos os parâmetros em uma matriz terminada em NULL argv. O primeiro elemento da matriz deve ser o caminho do arquivo executável. Caso contrário, a função execv () funciona da mesma forma que a função execl ().

Sintaxe:

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

Podemos reescrever o exemplo execl () da seguinte maneira:

#incluir
 
int main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
 
execv (binaryPath, args);
 
return 0;

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

execvp () Função do sistema:

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

Sintaxe:

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

Podemos reescrever o exemplo execv () da seguinte maneira:

#incluir
 
int main (void)
char * programName = "ls";
char * args [] = programName, "-lh", "/ home", NULL;
 
execvp (nome do programa, args);
 
return 0;

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

execle () Função do sistema:

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 um array envp. O último elemento do envp array deve ser NULL. Todos os outros elementos contêm os pares de valores-chave como string.

Sintaxe:

int execle (const char * caminho, const char * arg,…, NULL, char * const envp []);

Um exemplo da função de sistema execle () é fornecido 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 "," PORT = 8080 ", NULL;
 
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
 
return 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.

execve () Função do sistema:

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 fez em execv ().

Sintaxe:

int execve (const char * arquivo, 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 "," PORT = 8080 ", NULL;
 
execve (binaryPath, args, env);
 
return 0;

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

Então, é assim que você usa a família de funções exec em C para programação de sistema no Linux. Obrigado por ler este artigo.

O botão esquerdo do mouse não funciona no Windows 10
Se você estiver usando um mouse dedicado com seu laptop ou computador desktop, mas o o botão esquerdo do mouse não funciona no Windows 10/8/7 por algu...
O cursor pula ou se move aleatoriamente enquanto digita no Windows 10
Se você descobrir que o cursor do mouse pula ou se move por conta própria, de forma automática e aleatória ao digitar em um laptop ou computador com W...
Como reverter a direção de rolagem do Mouse e Touchpads no Windows 10
Mouse e Touchpads não apenas torna a computação mais fácil, mas mais eficiente e menos demorada. Não podemos imaginar uma vida sem esses dispositivos,...