Considerando que a função exec () é usada para alterar o programa atual existente pelo novo. Essa substituição é feita por meio de alterações no conteúdo de um programa ou arquivo. Portanto, a diferença entre fork e exec é que fork cria um novo processo a partir do processo existente, e exec é usado para substituir o programa existente criando um novo.
Pré-requisitos
Para executar qualquer programa c em seu sistema Linux, precisamos instalar alguns pré-requisitos nele. Vá para o terminal usando o método de atalho Ctrl + Alt + T. Agora escreva os seguintes comandos para instalar as páginas do manual.
$sudoaptoinstalarmanpages-dev
Ele irá instalar todas as páginas correspondentes.
Seguindo em frente, para executar um programa no Linux, você precisa instalar um compilador de código. Isso é usado para compilar o código e executá-lo. Para isso, instalaremos repositórios GCC em nosso sistema.
$sudoaptoinstalarGCC
Codificando com exec em c
Como instalamos as páginas do manual no Linux, usaremos o seguinte comando para ver a descrição referente ao exec. O exemplo de sintaxe principal é o seguinte:
Sintaxe
Exec(nome do caminho/Arquivo, argv);Aqui, usamos o cabeçalho unistd.h, pois contém todas as informações de famílias de funções exec.
$cara exec
Agora na imagem citada acima, você pode observar os tipos de exec. Estas são a família de funções exec. Cada um é para uma função diferente seguindo a mesma base, exec.
Exemplo: Agora, avançando, descreveremos a funcionalidade do exec com a ajuda de um exemplo. Usaremos uma função de exec para demonstrar seu funcionamento, que é execv. Primeiramente, criaremos dois arquivos com a extensão .c. Após sua criação, iremos escrever os respectivos códigos neles e executá-los para ver o resultado.
Considere um nome de arquivo sample4.c. Abra-o e use o seguinte código. Neste código, usamos execv de uma maneira particular citada abaixo.
Execv(./sample4copy, args);A primeira parte contém o novo caminho do diretório e a segunda parte mostra a matriz de argumentos como um parâmetro que passamos.
Sample4.c
Em primeiro lugar, imprimimos o id do processo atual. Em segundo lugar, criamos uma matriz de caracteres com NULL no final para a terminação. Em terceiro lugar, chamamos a função sample4copy.
Sample4copy.cQuando chamamos a função exec (), a imagem do processo é alterada. A imagem citada abaixo mostra o código de sample4copy.c.
Aqui, usamos apenas instruções de impressão para obter a id do processo atual.
A saída dos respectivos códigos pode ser obtida usando os seguintes comandos.
$ GCC – o sample4 sample4.c$ GCC –o sample4copy sample4copy.c
$./amostra4
Como descrevemos anteriormente, a palavra GCC é usada para compilar o código e, após a compilação, o código é executado com sucesso.
De acordo com a imagem, o PID do arquivo sample4.c é mostrado primeiro, pois foi declarado antes da chamada de exec. Então, depois que a função exec () é chamada, ambas as instruções de impressão do arquivo sample4copy.c são executadas, onde getpid () é usado para obter o id do processo.
Codificando com um garfo em c
A função fork () cria o processo filho a partir do processo pai. Ele também contém dois cabeçalhos, incluindo as informações do fork nele.
Sintaxe:
Pid_t fork(vazio);Podemos usar a página de manual para obter ajuda no uso
$caragarfo
Exemplo: Agora considere um exemplo criando um arquivo sample3.c. Vamos inserir o código dentro do arquivo. De acordo com o código, definimos o status do fork como forkrank.
Sample3.c
Usamos a instrução if-else para aplicar a condição. Comandos de impressão simples são declarados aqui para ajudar na compreensão do conceito fork (). Forkrank é declarado primeiro como 0 e, em seguida, -1. Com um fork (), agora existem dois processos que estão funcionando simultaneamente. A saída pode ser obtida usando o mesmo código, conforme usado acima no exemplo de exec.
$ GCC –o sample3.c$./amostra3
A saída mostra que o processo filho é executado antes do pai quando o processo pai estava esperando. A função de espera implica que ela faz com que a função pai espere, a menos que um de todos os processos filho seja encerrado.
Chamadas de sistema Fork e Exec coletivamente
Aqui, pegaremos dois arquivos chamados sample1.ce sample2.c. Primeiro, abra o arquivo sampl1.c e escreva o código que está anexado abaixo na imagem. Usamos a chamada de sistema fork () aqui; quando o processo filho é criado, p será atribuído com 0. Ao usar exec system-call, o sample1.c será substituído por sample2.c.
Sample1.c
Sample2.c
Semelhante aos exemplos discutidos acima, o arquivo sample2 conterá as instruções printf nele. Em sample1.c, o primeiro comando de impressão é executado primeiro, então a função fork é chamada, quando p == 0, então a parte filha é executada e o arquivo sample2.c será executado. A saída conterá o GCC para compilar os dois arquivos. Aqui, id sample1.c pai e id sample2.c são diferentes porque são pai e filho.
Conclusão
Neste artigo, usamos fork e exec separadamente e coletivamente para entender o uso e o conceito facilmente. Espero que este tutorial contenha conteúdo suficiente que levará ao acesso para aumentar seu conhecimento.