Exemplo: Função GetsockName
Vamos dar uma olhada no exemplo da função GetsockName em C. Utilize o atalho "Ctrl+Alt+T" para abrir rapidamente o aplicativo de linha de comando na sua tela. Pode levar apenas 10 segundos, e seu terminal estará pronto para uso. Dentro da área de instrução do terminal, você deve digitar a consulta "Touch" junto com o "nome do arquivo" para gerar um novo arquivo em seu sistema, i i.e., vazio. Muitas opções estão disponíveis para abrir este arquivo recém -gerado, eu.e., vim, nano ou editor de texto. Os usuários podem preferir abri -lo no editor de texto primeiro, criar um código, atualizar ou modificar o código e depois executar dentro do shell. Isso pode ser feito simplesmente tocando duas. Se os usuários desejam abrir o arquivo vazio dentro do editor "GNU Nano", eles podem utilizar o comando "nano" do terminal. Escreva esta instrução e pressione Enter para executá -lo. As instruções para criação e abertura de arquivos estão listadas:
O código C começa com a inclusão de alguns dos principais e importantes arquivos de cabeçalho. A palavra -chave "incluir" é usada com o sinal de hash para fazer isso. Um total de 11 cabeçalhos são usados aqui. O “stdio.H ”tem sido usado para obter a entrada e saída padrão. O “unistd.h ". é utilizado para acessar a API do sistema operacional POSIX, i.e., Linux e sistemas semelhantes a Unix. O “stdlib.H ”o cabeçalho é uma biblioteca padrão para fins gerais, eu.e., Digite conversões, gerenciamento de processos, alocações de armazenamento, etc. O “errno.H ”é usado principalmente para problemas de erro e relatórios. A corda.O módulo H ”para C é usado para lidar com as cordas junto com algumas das outras funções. Os “sys/tipos.O cabeçalho H ”é utilizado para definir os tipos de dados das variáveis e as funções usadas em nosso código de programa.
O arquivo de cabeçalho “SYS/STAT.H ”é usado aqui para descrever a construção dos dados de informações retornados. A biblioteca de cabeçalho “Sys/Socket.H ”será utilizado para usar as funções e mutáveis dos soquetes em nosso código. O “SYS/ONU.A biblioteca de cabeçalho H ”está aqui para salvar os endereços de soquetes do tipo Unix. O “netint/in.H ”foi projetado especificamente para inicializar o tipo de estrutura mutável para o endereço IPv6 no loopback.
As variáveis INET Addrstrlen ou Inet6 Addrstrlen geralmente são definidas no “ARPA/INET.H ”biblioteca de cabeçalho. Depois de todos os arquivos do cabeçalho, implementamos uma função definida pelo usuário chamada "Showerror", tomando um argumento de ponteiro de personagem constante "e". Este argumento de ponteiro faz referência a alguns erros encontrados até agora em nosso código. Para a linguagem de programação C, o método de erro POSIX, i.e., Perror, está sendo usado para exibir uma mensagem de resposta de erro para "stderr", dependendo de uma condição de erro errno. Ele gera "STR" e uma mensagem de resposta de erro em conformidade com o Universal Mutable Errno, conforme determinado pelo código do programa. A função "Perror" usa o argumento "e" como uma mensagem de erro para mostrar. A função “Exit (1)” está aqui para sair ou encerrar a função “SHOWRROR ()” no momento:
Aí vem a função "Sock_addr" do tipo de ponteiro, levando três argumentos em seus parâmetros. O parâmetro “S” representa o soquete, e a variável de ponteiro do tipo de caractere “BUF” será usada para armazenar os dados do soquete. Enquanto o último argumento "bufsize" de um tipo de objeto "size_t" será usado para definir o tamanho de uma variável buffer ou simplesmente buffer. Dentro desta função, criamos uma estrutura chamada "Addr" para armazenar o endereço do soquete. O comprimento da variável "addr" foi armazenado na variável do tipo inteiro "len" aplicando a função "sizeof".
A função getsockname () foi utilizada aqui para adquirir o nome de um soquete. Esta função usa o soquete, endereços de soquete e comprimento do soquete como argumentos de entrada. Qualquer que seja a resposta para a função GetsockName, a resposta será armazenada na variável "z", eu.e., coletado ou não. A declaração "se" está aqui para verificar a condição de que a variável "z" recebeu o código de status de retorno como -1, i i.e., falso. Isso significa que, se você se encontrar incapaz de obter o nome de um soquete, ele retornará nulo à função de chamada. A função "snprintf" é usada para obter o endereço do soquete, convertê -lo em forma de string e exibi -lo no shell. Para isso, o tamanho do buffer e do buffer deve ser usado como argumento. O endereço da porta do soquete é utilizado na função "NTOHS" para convertê -la para hospedar o código de byte:
A função principal () leva 4 argumentos em seu parâmetro. A variável de endereço do tipo de estrutura “addr” para um soquete é declarada com a variável do tipo de caractere “buf” do tamanho 64. Em seguida, estamos criando um soquete da Internet IPv4 usando a função de soquete. Este status de soquete retorna o código e será salvo para a variável "sck_inet". Se o soquete não criar com sucesso, como o SCK_INET não for igual a zero, ele chamará a mensagem "SHOWRROR" ao passar um texto simples "soquete ()".
Depois disso, tentamos criar um endereço "AF_INET". A função MEMSET () é usada para inicializar o endereço para um soquete para 0. A família de endereço do soquete foi inicializada como "AF_INET", sua porta também é declarada enquanto a função HTONS está aqui para traduzir o formato de byte host para formato de byte de rede. A função inet_aton utiliza o endereço IP local para convertê -lo no formato de string padrão e salvá -lo na variável de endereço do soquete. O tamanho da variável de endereço é armazenado na variável "len". A função bind () liga o endereço ao soquete e salva o código de retorno de status em "Z". Se o código de status for "-1", eu.e., Falso, ele chamará a mensagem "SHOWRROR" enquanto chama a função bind (). Se a função “Sock_addr ()” não puder ser chamada, ela também chamará a função “SHOWRROR”, tomando “Sock_addr” como argumento. A instrução printf mostra o nome armazenado em um buffer:
A função de fechamento é chamada para fechar o soquete da Internet IPv4:
Após a compilação e execução, temos o nome do soquete no qual nosso sistema está conectado:
Conclusão:
Este artigo é de fato uma necessidade de cada usuário C pesquisando ansiosamente o exemplo de "getsockname" no Linux. Discutimos um único exemplo neste guia. Tentamos simplificar para nossos usuários, pois o código foi dividido em pedaços. Esperamos que você ache este artigo muito útil. Confira outros artigos de dica do Linux para obter mais dicas e tutoriais.