Sistema de garfo chamado em C

Sistema de garfo chamado em C

“O objetivo básico do método de comando fork é criar um ou mais processos infantis; Os processos infantis recém -criados são executados simultaneamente com o processo pai que criou esses processos infantis usando declarações de garfo. A próxima declaração que é seguida pelo comando fork será executada por processos infantis e pais simultaneamente. Os mesmos registros da CPU, o contador do programa (PC) e os arquivos abertos que o processo dos pais acessam são usados ​​pelo processo filho. O comando do garfo não recebe nenhum parâmetro como entrada, mas retorna um valor inteiro usando o qual podemos identificar facilmente se o comando de garfo criou o processo infantil com sucesso ou não.”

Abaixo está a lista de valores que são retornados pelo método do garfo:

  • Valor negativo: O processo de criação de um processo infantil falhou.
  • Zero: O processo infantil que acabou de ser criado foi devolvido.
  • Valor positivo: Retornou ao chamador ou pai com um valor positivo. O ID do processo do processo infantil recém -gerado está contido no valor.

Uma coisa a ter em mente é que o garfo é um método de rosqueamento; Portanto, para ver os resultados; Você deve executar o processo no sistema local. O comando do garfo pode exigir determinados arquivos de cabeçalho ou biblioteca, como sistemas/tipos.h e unistd.h. Você deve configurar um sistema operacional baseado em Linux ou UNIX para executar o programa porque o comando Fork não pode ser usado em um ambiente do Windows. Você deve primeiro confirmar que o compilador GCC foi configurado no ambiente do sistema operacional. Para conseguir isso, devemos primeiro lançar o terminal e depois entrar no comando gcc -version, que exibe as informações que o compilador do GCC da versão 11.2.0 foi instalado.

Antes de trabalhar nos trechos de código C, você deve manter e atualizar seu sistema. A razão por trás de sua atualização é atender às próximas questões relacionadas às versões mais recentes do Linux. Então, experimente a consulta "Atualize" abaixo e faça seu Linux atualizado.

Exemplo 1

Vamos começar com o programa mais simples e fácil, no qual usamos apenas um único método de garfo e uma declaração de impressão direta. Os programas exigiam arquivos de cabeçalho listados nas três primeiras linhas do código. O método Fork () é chamado na linha de abertura do método principal. O comando Fork cria um processo infantil que executa simultaneamente a declaração abaixo. Como resultado, a declaração de impressão aparecerá duas vezes na tela da concha quando o programa começar a ser executado. Vamos começar a escrever o comando no ambiente do Ubuntu. Temos que criar o arquivo usando o Nano Editor, mas você pode usar sua escolha. Digite o comando abaixo para criar o novo arquivo:

Nano Forkthread.c

Quando o editor abre um arquivo no modo de edição, ele está vazio, então devemos inserir o código antes de fechar o arquivo e salvá -lo. O comando do garfo deve ser precedido por uma declaração indicando que o processo infantil será iniciado após este comando. Após o garfo, a declaração de impressão será executada duas vezes, uma vez pelo processo pai e depois pelo processo infantil recém -estabelecido. Esta declaração será executada apenas uma vez.

#incluir
#incluir
#incluir
int main ()
printf ("Antes do método do garfo.\ n ");
garfo();
printf ("Processo infantil criado.\ n ");
retornar 0;

Depois de salvar e fechar o Forkthread.Arquivo C, agora devemos usar o compilador GCC para compilar o arquivo C e criar o arquivo de saída usando o comando abaixo.

GCC Forkthread.C -O Forkthread.fora

O arquivo C será compilado pelo compilador GCC, e os resultados serão salvos no Forkthread.arquivo out. No entanto, se você não usar a bandeira -o, o compilador GCC armazenará a saída para o a.OUT FILE, que é seu nome padrão, após a compilação. A imagem mostra como podemos compilar o arquivo C usando o comando acima.

Os resultados da compilação revelam que não houve sintaxe ou erros semânticos em nosso código, provando que ele havia sido compilado com sucesso e que o arquivo de saída foi gerado com sucesso. Você pode ver os resultados agora que o arquivo de saída foi executado. Basta digitar o comando curto abaixo para conseguir isso:

./Forkthread.fora

Exemplo 2

Neste exemplo, contaremos as instâncias em que um código de código que contém inúmeras linhas de garfo () é executado. Devemos escrever numerosos métodos de garfo e alterar o código existente. Você deve estar ciente de que o número de vezes que um pedaço de código é executado depende do poder de 2, o número de vezes que a declaração do garfo foi escrita. Por exemplo, se a declaração do fork foi escrita três vezes, o código será executado 2^3 = 8 vezes. Abaixo está o trecho do código C atualizado para uma chamada do sistema de garfo.

#incluir
#incluir
#incluir
int main ()
printf ("Antes do método do garfo.\ n ");
int i = 0;
garfo();
garfo();
garfo();
printf ("Processo infantil criado: [%d] \ n", i);
i ++;
retornar 0;

No código acima, existem três declarações de garfo e, antes delas, declaramos uma variável "i" do tipo inteiro que será usado para rastrear o processo que cada declaração de garfo cria. Esta variável também será incrementada após cada declaração de garfo e antes da declaração de devolução. Como o código foi modificado, vamos recompensá -lo usando o compilador GCC. O arquivo de saída é gerado com sucesso.

Como você pode ver, a variável "eu" não foi aumentada de forma alguma porque a declaração do garfo é imediatamente seguida por uma declaração impressa que imprime oito vezes, o que significa que cada declaração de garfo contém um processo que executa o código mencionado simultaneamente e só usa Uma cópia do programa, impedindo que qualquer incremento ocorra no código. Há um total de oito métodos de impressão separados usados ​​para imprimir a mensagem abaixo. Como você pode ver, não há incremento. Porque o processo filho executa apenas um comando de impressão.

Conclusão

Isso se tratava de usar a chamada do sistema C "Fork". Tentamos ilustrações diferentes para obter saídas diferentes, e métodos diferentes foram utilizados. Se você deseja entender o sistema C "Fork", tente implementar os dois exemplos acima de várias maneiras do seu lado, e você está pronto para ir.