Encontre o nome do host do sistema em C

Jinku Hu 12 outubro 2023
  1. Use a função gethostname para encontrar o nome do host do sistema em C
  2. Use a função uname para encontrar o nome do host do sistema em C
Encontre o nome do host do sistema em C

Este artigo irá explicar vários métodos de como encontrar o nome do host do sistema em C.

Use a função gethostname para encontrar o nome do host do sistema em C

A função gethostname faz parte da especificação POSIX e é usada para acessar o nome do host do sistema. A função leva dois argumentos: char* apontando para um buffer onde o nome do host recuperado será armazenado e o número de bytes denotando o comprimento do buffer. A função retorna zero em caso de sucesso e -1 é retornado em caso de erro. Observe que os sistemas POSIX provavelmente têm um número máximo de bytes definidos para o comprimento do nome do host, então o usuário deve alocar um buffer grande o suficiente para armazenar o valor recuperado.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

enum { MAX_SIZE = 256 };

int main(void) {
  int ret;
  char hostname[MAX_SIZE];

  ret = gethostname(&hostname[0], MAX_SIZE);
  if (ret == -1) {
    perror("gethostname");
    exit(EXIT_FAILURE);
  }
  printf("Hostname:    %s\n", hostname);

  exit(EXIT_SUCCESS);
}

Resultado:

Hostname:    lenovo-pc

O exemplo anterior demonstra a chamada básica para a função gethostname, mas deve-se sempre implementar rotinas de relatório de erros para garantir código à prova de falhas e mensagens de registro informativas. Uma vez que gethostname define valores errno, podemos avaliá-lo em uma instrução switch e imprimir as mensagens correspondentes para o fluxo stderr.

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

enum { MAX_SIZE = 256 };

int main(void) {
  int ret;
  char hostname[MAX_SIZE];

  errno = 0;
  ret = gethostname(&hostname[0], MAX_SIZE);
  if (ret == -1) {
    switch (errno) {
      case EFAULT:
        fprintf(stderr, "'name' argument is an invalid address");
        break;
      case EINVAL:
        fprintf(stderr, "'len' argument is negative");
        break;
      default:
        perror("gethostname");
    }
    exit(EXIT_FAILURE);
  }
  printf("Hostname:    %s\n", hostname);

  exit(EXIT_SUCCESS);
}

Resultado:

Hostname:    lenovo-pc

Use a função uname para encontrar o nome do host do sistema em C

Alternativamente, pode-se utilizar a chamada de função uname para encontrar o nome de host do sistema. uname geralmente pode recuperar vários pontos de dados sobre o sistema, nomeadamente o nome do sistema operacional, data de lançamento do sistema operacional e versão, identificador de hardware e nome do host. Observe, porém, que uname armazena as informações acima em uma estrutura utsntheame definida no arquivo de cabeçalho <sys/utsname.h>. A função leva o ponteiro para a estrutura utsname e retorna o valor zero em uma chamada bem-sucedida. uname também define errno em caso de falha, e o valor EFAULT é definido como uma indicação quando o ponteiro passado para uma estrutura utsname é inválido.

#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>

enum { MAX_SIZE = 256 };

int main(void) {
  struct utsname uts;

  if (uname(&uts) == -1) perror("uname");

  printf("Node name:   %s\n", uts.nodename);
  printf("System name: %s\n", uts.sysname);
  printf("Release:     %s\n", uts.release);
  printf("Version:     %s\n", uts.version);
  printf("Machine:     %s\n", uts.machine);

  exit(EXIT_SUCCESS);
}

Resultado:

Hostname:    lenovo-pc
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C Networking