Como usar a chamada selecionada do sistema em C

Como usar a chamada selecionada do sistema em C
A chamada SELECT () permite que um sistema acompanhe vários descritores de arquivos. Portanto, a chamada de sistema selecionada aguarda um dos descritores ou um todo para estar "pronto" para um tipo específico de atividade de E/S (e.g., entrada possível). Se o processo de E/S subsequente (e.g., Leia (2)) pode ser realizado 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 escrever ou em um estado de exceção. Suponha que a situação declarada seja falsa para os descritores de arquivo declarados. Nesse caso, os blocos de chamadas SELECT () do sistema antes que as circunstâncias mencionadas sejam válidas para o mínimo um dos descritores de documentos declarados, igual ao intervalo declarado de tempo limite.

Exemplo para selecionar chamada do sistema:

Vamos ter um exemplo simples para conferir o funcionamento da chamada selecionada do sistema. Abra o shell da linha de comando usando o “ctrl+alt+t.”Após a abertura do terminal, verifique se você tem um compilador de idioma C instalado no 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ê deseja ver o Linux Select System Chamada funcionando, você deve ter o pacote ManPages-Dev instalado no seu sistema, conforme o comando abaixo. Escreva a senha do seu usuário para continuar.

$ sudo apt install manpages-dev

Você pode ver a sintaxe e o funcionamento da chamada selecionada do sistema usando o comando "homem" abaixo.

$ MAN 2 SELECT

A página do homem de saída para a chamada selecionada do sistema é mostrada abaixo. Saia pressionando a tecla "Q".

Diretórios padrão, terminal de shell de comando e aplicações pseudo-terminais, fluxos centralizados documentos, fifos, incluindo tubos, são todos suportados pelo módulo select (). A atividade de select () nos descritores de documentos que se refere a esses outros formatos de arquivo é desconhecida. Então, abaixo está a explicação da chamada do sistema selecionado.

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

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

O fds A 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, refere -se a uma variedade de formulários fd_set que define quais descritores de documentos devem ser testados para prontidão para ler sobre entrada e quais descritores de documentos devem ser configurados para ler na saída.

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

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

Os parâmetros ReadFDs, WriteFDS e ERRORFDS são atualizados após a realização para significar que os descritores de documentos estão preparados para ler, totalmente preparados para escrever ou até mesmo ter um estado de exceção aguardando, de acordo. Se o bit subsequente for corrigido na entrada e a situação relevante for válida para cada descritor de arquivos um pouco abaixo do NFDS, o bit subsequente seria colocado em realização eficaz.

Embora o parâmetro de tempo limite não esteja realmente vazio, ele leva a uma entidade Timeval de estrutura que determina o tempo supremo para manter seu fogo para a escolha de terminar. Select () não obstrua se esse parâmetro de tempo limite levar a um objeto TimeVal da estrutura com 0 elementos. Selecionar () paradas, a menos que uma ocorrência permita que um dos filtros seja recuperado com um resultado verdadeiro (diferente de zero), se a declaração de tempo limite é uma referência vazia. Select () é bem-sucedido de maneira eficaz e produz 0 quando o período de espera terminar mesmo antes da ocorrência acontecer, o que pode exigir que uma das várias máscaras seja ajustada a um valor diferente de zero.

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

O descritor de documentos FD é adicionado à coleção por esta macro. Usar um descritor de documentos para uma coleção que já existiu seria não operacional e, portanto, não resulta em um erro de exceção.

O descritor do 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 select () do sistema altera as informações ou dados das coleções, conforme 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 do tipo C chamado “Novo.C ”como abaixo.

$ nano novo.c

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

Agora compile o código usando a instrução "GCC".

$ gcc novo.c

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

$ ./a.fora

Novamente, execute o código e dê alguma contribuição no terminal, e.g., “Aqsa.”Será que será lançado 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 de Linux de maneira igual e adequada. Espero que você ache este artigo fácil de implementar e entender.