Epoll 7 C função

Epoll 7 C função
A linguagem C é uma linguagem muito vasta quando se trata do uso de diferentes tecnologias ou APIs. Também é muito utilizável quando queremos usar a programação do soquete. Assim, surge as funções do epoll 7. A pesquisa (2) e a API do epoll observam os vários descritores de documentos para determinar se a E/S é viável em cada um deles. A API do Epoll se estende muito bem com o grande número de descritores de documentos monitorados e pode ser usado como um gateway de nivelado ou com ponta de borda.

A entidade Epoll, um modelo de informação no kernel que pode ser visto no espaço do usuário como um invólucro para dois conjuntos, serve como a idéia fundamental da API Epoll. Dentro deste guia, discutiremos o uso da função Epoll no idioma C.

  • Lista de juros: O grupo de interesse, também conhecido como coleção Epoll, é a coleção de descritores de documentos que o procedimento indicou que está interessado em acompanhar. A coleção de descritores de documentos que parecem estar "prontos" para a E/S é conhecida como a fila All-set.
  • Lista pronta: A coleção de identificadores de documentos que estão "preparados" para E/S é conhecida como "Lista Ready.”Os identificadores de documentos na lista de juros são um subgrupo de (ou, mais corretamente, uma coleção de ponteiros para) a lista pronta. O kernel usa operações de E/S nesses descritores de documentos para preencher periodicamente a lista pronta.

As funções do sistema a seguir estão disponíveis para construir e administrar um objeto Epoll:

  • Epoll_create (2): a função Epoll Create (2) inicia uma nova instância do serviço Epoll e retorna um descritor de arquivo. (O epoll mais moderno Create1 (2) expande no epoll Create (2) (capacidade).)
  • Epoll_ctl (2): contribui com as coisas para a lista de interesses do objeto Epoll e é usado para inscrever o interesse em descritores de documentos específicos.
  • Epoll_wait (2): Se não houver atividades de E/S presentes no momento, o epoll espera (2) bloqueia o tópico que o chamou. (Esta chamada do sistema pode ser vista como coletando coisas da lista pronta do objeto Epoll.)

Acionado por nível e acionado por bordas

Os comportamentos acionados por arestas (ET) e acionados por nível (LT) são possíveis para a interface de circulação de incidentes da Epoll (LT). As diferenças dos dois métodos podem ser resumidas da seguinte forma. Suponha que os seguintes transmitam:

  1. O lado de leitura do descritor de documento de um tubo (RFD) está inscrito no objeto Epoll.
  2. Um total de 2 kb de conteúdo escrito na parede de escrita do recipiente por um autor de tubo.
  3. Uma solicitação para Epoll Wait (2) é feita e a RFD, uma alça de arquivo preparada, é retornada.
  4. Do RFD, o leitor de pipeline lerá 1 kilobyte de conteúdo.
  5. Uma chamada de função epoll_wait (2) é feita.

A solicitação para epoll_wait (2) feita na etapa 5 provavelmente parará se o identificador de documentos da RFD foi atribuído ao protocolo Epoll com o sinal Epollet (Edge Triggered). Enquanto isso, o parceiro remoto pode estar antecipando uma reação, dependendo do conteúdo que já fornecia. Isso ocorre porque a opção acionada por arestas envia apenas sinais sempre que o descritor de documentos observado sofre modificações.

Portanto, a função do chamador pode até ter que ser suspensa para uma determinada informação que já está no cache do buffer na Fase 5. No exemplo acima mencionado, a gravação em 2 pode desencadear uma atividade a ser criada no RFD, e o incidente será recebido em 3. A chamada para epoll_wait (2) na etapa 5 pode ficar presa porque a atividade de leitura na etapa 4 não usou todas as informações do buffer.

Para impedir que uma leitura ou escrita paralisie a esgotar um trabalho que está gerenciando os vários descritores de arquivos, um programa que usa a opção Epollet deve estar usando os descritores de documentos não bloqueadores. A seguir, é apresentado um procedimento recomendado para usar o epoll como uma interface acionada por arestas (epollet):

  • Descritores de documentos não bloqueadores e
  • Logo após a leitura (2) ou escrever (2), entregue Eagin, vou esperar por uma ação.

Epoll, por outro lado, é apenas uma versão mais rápida da pesquisa (2) e pode ser usada em todos os lugares (2) é usada, pois possui a lógica idêntica sempre que é vista como um protocolo desencadeado por nível (o padrão sempre que o epollet for não dado). A função do chamador tem a opção de fornecer o sinal de epolloneshot para instruir o epoll a fechar o descritor de arquivo vinculado ao receber uma ocorrência com epoll_wait. Enquanto isso, mesmo com o Epoll acionado por arestas, muitas ações podem ser criadas após a recepção dos vários conjuntos de informações (2). O chamador realmente deve reimplementar o descritor do documento com o epoll_ctl (2) e epoll_ctl_mod sempre que a bandeira epolloneshot é dada.

Exemplo:

Embora a lógica do epoll, quando usada como uma API limite, seja idêntica à da pesquisa (2), o comportamento acionado por arestas usa exige uma maior explicação para impedir os atrasos na fila do evento do programa. O ouvinte nesta ilustração é um soquete que não bloqueia sobre o qual a função escuta (2) é invocada. Antes de EAGAIN ser dada pela função Read (2) ou Write (), o método use a função fd () para manter o novo descritor de arquivo pronto (2). Um aplicativo de máquinas de estado orientado a eventos também pode salvar seu estado atual depois de receber o EAGAIN, para que possa retomar a leitura ou a escrita no ponto anterior, quando o FD () é chamado novamente. Confira o código afixado aqui:

Para melhorar a eficiência, o descritor de arquivo só pode ser adicionado uma vez na interface Epoll (Epoll CTL Add) designando (epollin | epollout) como uma interface acionada por arestas. Ao executar o Epoll CTL (2) com o Epoll CTL Mod, você pode evitar a mudança constante entre Epolin e Epollout. O código restante para esta ilustração é anexado na imagem a seguir:

Conclusão:

Trata -se do uso da função Epoll 7 C no Ubuntu 20.04 Sistema operacional Linux para executar a programação do soquete. Discutimos como uma função epoll () 7 C pode ser usada para verificar a viabilidade dos vários descritores de arquivo para determinar se a entrada e a saída que eles contêm são viáveis ​​ou não, tanto do servidor quanto do lado do cliente.