Considerando que a função exec () é usada para alterar o programa atual existente com o novo. Esta 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.
$ sudo apt install manpages-dev
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 este propósito, iremos instalar repositórios GCC em nosso sistema.
$ sudo apt install GCC
Codificando com exec em c
Como instalamos as páginas do manual no Linux, usaremos o seguinte comando para ver a descrição do exec. A sintaxe de amostra primária é a seguinte:
Sintaxe
Exec (nome do caminho / arquivo, argv);Aqui nós usamos o “unistd.h ”cabeçalho, pois contém todas as informações de famílias de funções exec.
$ man exec
Agora na imagem citada acima, você pode observar os tipos de executivos. Esta é a família de funções executivas. 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. Pegaremos uma função de exec para demonstrar seu funcionamento, que é “execv.”Em primeiro lugar, vamos criar dois arquivos com a extensão“.c.”Após a 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 abaixo citada abaixo mostra o código de sample4copy.c.
Aqui, usamos apenas as instruções de impressão para obter o 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
$ ./ sample4
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 da amostra 4.o arquivo c é mostrado primeiro como foi declarado antes da chamada exec. Então, depois que a função exec () é chamada, ambas as instruções de impressão do arquivo sample4copy.c é executado 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 da bifurcação nele.
Sintaxe:
Pid_t fork (vazio);Podemos usar a página de manual para obter ajuda no uso
$ man fork
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 declaraçã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 funcionam simultaneamente. A saída pode ser obtida usando o mesmo código, conforme usado acima no exemplo de exec.
$ GCC -o sample3.c$./ sample3
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 “amostra1.c ”e“ amostra2.c ”. Primeiro, abra o arquivo sampl1.ce 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 a chamada de sistema exec, 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. Na amostra1.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 sample2.o arquivo c será executado. A saída conterá GCC para compilar os dois arquivos. Aqui, amostra 1 pai.id e sample2.c id é diferente porque eles são pais e filhos.
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 o levará ao acesso para aumentar o seu conhecimento.