Trouver le nom d'hôte du système en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction gethostname pour trouver le nom d’hôte du système en C
  2. Utilisez la fonction uname pour trouver le nom d’hôte du système en C
Trouver le nom d'hôte du système en C

Cet article explique plusieurs méthodes pour trouver le nom d’hôte du système en C.

Utiliser la fonction gethostname pour trouver le nom d’hôte du système en C

La fonction gethostname fait partie de la spécification POSIX, et elle est utilisée pour accéder au nom d’hôte du système. La fonction prend deux arguments : char* pointant vers un tampon où le nom d’hôte récupéré sera stocké et le nombre d’octets indiquant la longueur du tampon. La fonction renvoie zéro en cas de succès, et -1 en cas d’erreur. Notez que les systèmes POSIX sont susceptibles d’avoir un nombre maximum d’octets défini pour la longueur du nom d’hôte, donc l’utilisateur devrait allouer le tampon assez grand pour stocker la valeur récupérée.

#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);
}

Production :

Hostname:    lenovo-pc

L’exemple précédent montre l’appel de base à la fonction gethostname, mais il faut toujours mettre en œuvre des routines de rapport d’erreur pour assurer un code à sécurité intégrée et des messages de journalisation informatifs. Puisque la fonction gethostname fixe des valeurs errno, nous pouvons l’évaluer dans une instruction switch et imprimer les messages correspondants dans le flux 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);
}

Production :

Hostname:    lenovo-pc

Utilisez la fonction uname pour trouver le nom d’hôte du système en C

On peut aussi utiliser l’appel de fonction uname pour trouver le nom d’hôte du système. uname peut généralement récupérer plusieurs points de données sur le système, à savoir le nom du système d’exploitation, la date de sortie du système d’exploitation, la version, l’identifiant du matériel et le nom d’hôte. Notez cependant que uname stocke les informations ci-dessus dans une structure utsntheame définie dans le fichier d’en-tête <sys/utsname.h>. La fonction prend le pointeur vers la structure utsname et renvoie la valeur zéro lors d’un appel réussi. La fonction uname définit également errno en cas d’échec, et la valeur EFAULT est définie comme une indication lorsque le pointeur passé à une structure utsname est invalide.

#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);
}

Production :

Hostname:    lenovo-pc
Auteur: 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

Article connexe - C Networking