Vamos dividir as diferenças entre `Execl` e` System` no Unix:
`Execl` (e suas variantes) *
Objetivo: `Execl` substitui o processo atual por um novo. Ele carrega e executa diretamente o programa especificado, encerrando efetivamente o programa original.
*
como funciona: *
Substituição: O processo de chamada é substituído pelo novo processo. Isso significa que não há retorno ao programa original.
*
argumentos: `Execl` pega o nome do arquivo executável e uma lista de argumentos como parâmetros. Ele não tem a capacidade de lidar com o redirecionamento padrão de entrada/saída.
*
Exemplo: `` `c
#include
#include
int main () {
execl ("/bin/ls", "ls", "-l", nulo); // Substitua o processo atual por 'ls -l'
// Esta linha não será alcançada
retornar 0;
}
`` `
`System`
* Objetivo: `System` Executa um comando como um processo separado. Ele permite executar comandos de shell do seu programa C.
* como funciona:
* garfo e executivo: `System` usa` fork` para criar um processo filho. Este processo infantil executa o comando usando `Execl`.
* Processos separados: O processo original e o comando recém -executado são executados em processos separados. Isso significa que o processo original pode continuar após o término do comando.
* Entrada/saída: A função `System` fornece uma maneira de gerenciar a entrada, saída e redirecionamento de erros padrão através do shell.
* Exemplo:
`` `c
#include
int main () {
sistema ("ls -l"); // executar 'ls -l' como um processo separado
retornar 0;
}
`` `
Diferenças -chave
* Substituição do processo: `Execl` substitui o processo atual, enquanto o` System` cria um novo processo.
* retornar: `Execl` não retorna ao programa de chamada, enquanto o` System 'retorna após o término do comando executado.
* Integração do shell: `System` fornece acesso aos recursos do shell para redirecionamento e tubos de comando, enquanto o` Execl` executa diretamente um programa.
Quando usar cada função
* `Execl`: Use `Execl` quando deseja substituir completamente o processo atual por outro programa. É adequado para casos em que o programa de chamada não precisa continuar após o início do novo programa.
* `System`: Use `System` quando deseja executar um comando como um processo separado e retenha o controle sobre o programa original. É adequado para cenários em que você precisa executar comandos de shell ou redirecionar a entrada/saída.
Notas adicionais
* Existem outras variantes de `Execl`:` Execv`, `Execlp`,` Execvp`, etc., que diferem na maneira como lidam com argumentos e caminhos de pesquisa.
* Ambos `Execl` e` System` têm implicações de segurança. Se você estiver passando por uma entrada fornecida pelo usuário para essas funções, certifique-se de higienizá-lo para evitar possíveis ataques de injeção de código.