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.