Programação C

Como Usar Selecionar Chamada do Sistema C

Como Usar Selecionar Chamada do Sistema C
A chamada de sistema select () permite que um sistema acompanhe vários descritores de arquivo. Assim, a chamada de sistema selecionada espera que um dos descritores ou um todo esteja "pronto" para um tipo específico de atividade de I / O (e.g., entrada possível). Se o processo de I / O subsequente (e.g., read (2)) pode ser realizada apesar do bloqueio, o descritor de arquivo é considerado capaz. O método select () descreve se um descritor de documento está disponível para leitura, preparado para escrita ou em um estado de exceção. Suponha que a situação declarada seja falsa para todos os descritores de arquivo declarados. Nesse caso, os blocos de chamada do sistema select () antes das circunstâncias mencionadas são válidos para pelo menos um dos descritores de documento declarados, igual ao intervalo de tempo limite declarado.

Exemplo para selecionar chamada do sistema:

Vamos ter um exemplo simples para verificar o funcionamento da chamada de sistema select. Abra o shell da linha de comando usando “Ctrl + Alt + T.”Após a abertura do terminal, certifique-se de ter um compilador de linguagem C instalado em seu sistema porque o código não funcionará sem ele. Se você não tiver um, tente o comando abaixo para fazer isso.

$ sudo apt install gcc

Se você quiser ver a chamada de sistema selecionada do Linux funcionando, você deve ter o pacote manpages-dev instalado em seu sistema conforme o comando abaixo. Escreva sua senha de usuário para continuar.

$ sudo apt install manpages-dev

Você pode ver a sintaxe e o funcionamento da chamada de sistema selecionada usando o comando “man” abaixo.

$ man 2 select

A página do manual de saída para a chamada de sistema selecionada é mostrada abaixo. Saia pressionando a tecla “q”.

Diretórios padrão, terminal de shell de comando e aplicativos de pseudo-terminal, documentos centrados em STREAMS, FIFOs, incluindo canais, são todos suportados pelo módulo select (). A atividade de select () nos descritores de documento referentes a esses outros formatos de arquivo é desconhecida. Abaixo está a explicação da chamada de sistema Select.

A descrição da sintaxe mostrada na imagem acima é descrita abaixo.

Acima está a biblioteca a ser incluída no código C ao usar a chamada de sistema selecionada. Se não estiver incluído, o código não funciona.

O nfds declaração define o conjunto de descritores de arquivo que será avaliado. O método select () verifica os descritores de arquivo entre 0 e nfds-1.

Enquanto readfds não é nulo, ele se refere a um array de formato fd_set que define quais descritores de documentos devem ser testados para leitura na entrada e quais descritores de documentos devem estar todos configurados para ler na saída.

Quando o writefds parâmetro não está vazio, ele se refere a uma entidade do formulário fd_set que define quais descritores de documento devem ser testados quanto à prontidão para inscrição na entrada. Os descritores do documento devem ser preparados para compor na saída.

Enquanto o errorfds o parâmetro não está vazio, ele se refere a um objeto do tipo fd_set, que determina quais descritores de documento devem ser testados para aguardar estado de erro na entrada; também, os descritores do documento devem ser verificados na saída.

Os parâmetros readfds, writefds e errorfds são atualizados após a conclusão para significar que os descritores de documentos estão preparados para serem lidos, totalmente preparados para serem escritos ou mesmo com um estado de exceção aguardando, de acordo. Se o bit subsequente for fixado na entrada e a situação relevante for válida para cada descritor de arquivo um pouco sob nfds, o bit subsequente seria colocado na realização efetiva.

Embora o parâmetro de tempo limite não esteja realmente vazio, ele leva a uma entidade de estrutura temporal que determina o tempo supremo para segurar seu fogo para a escolha terminar. Select () não obstrui completamente se tal parâmetro de tempo limite levar a uma estrutura de objeto timeval com 0 elementos. Select () para a menos que uma ocorrência permita que um dos filtros seja recuperado com um resultado verdadeiro (diferente de zero), se a instrução de tempo limite for uma referência vazia. Select () é bem-sucedido e produz 0 quando o período de espera termina antes mesmo da ocorrência, o que pode exigir que uma das várias máscaras seja ajustada para um valor diferente de zero.

Esta macro elimina a coleção (apaga todos os descritores do documento). Pode ser usado como o primeiro passo na inicialização de uma coleção de descritores de documentos.

O descritor de documento fd é adicionado à coleção por esta macro. Usar um descritor de documento para uma coleção que já existe não seria operacional e, portanto, não resultaria em um erro de exceção.

O descritor de documento fd é removido da coleção por esta macro. Um descritor de arquivo eliminado da coleção que não existe não é operacional e, portanto, não resulta em uma exceção.

A chamada de sistema select () altera as informações ou dados das coleções de acordo com as regras mencionadas acima. A macro FD ISSET () pode ser eliminada invocando select () para ver se um descritor de documento permanece disponível em uma coleção.

Vamos criar um novo arquivo de tipo C chamado “novo.c ”como abaixo.

$ nano novo.c

O editor GNU foi aberto. Escreva o código abaixo nele. O código contém cabeçalhos, função principal com alguns descritores de arquivo conforme elaborado acima. Ele também contém uma estrutura para o valor do intervalo de tempo. Em seguida, usamos a chamada de sistema select para verificar o erro na instrução “if”. Pressione “Ctrl + S” para salvar este código e “Ctrl + X” para sair do editor.

Agora compile o código usando a instrução “gcc”.

$ gcc new.c

Execute o código e não adicione nenhuma entrada. A saída dirá “selecione o tempo limite.”

$ ./uma.Fora

Novamente, execute o código e forneça alguma entrada no terminal, e.g., “Aqsa.”Irá resultar que os“ dados estão disponíveis.”

Conclusão:

Implementamos a chamada de sistema selecionada no Ubuntu 20.04 sistema Linux. O código deve funcionar em todas as distribuições do Linux de forma igual e adequada. Espero que você ache este artigo fácil de implementar e entender.

SuperTuxKart para Linux
SuperTuxKart é um ótimo título projetado para trazer a você a experiência Mario Kart gratuitamente em seu sistema Linux. É bastante desafiador e diver...
Tutorial de Battle for Wesnoth
The Battle for Wesnoth é um dos jogos de estratégia de código aberto mais populares que você pode jogar no momento. Este jogo não está apenas em desen...
0 A.D. Tutorial
Dos muitos jogos de estratégia que existem, 0 A.D. consegue se destacar como um título abrangente e um jogo muito profundo e tático, apesar de ser de ...