Encontre o nome do host do sistema em C
-
Use a função
gethostname
para encontrar o nome do host do sistema em C -
Use a função
uname
para encontrar 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
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