tiempo sistema obtener hora funciones formato fecha ejemplo dev calcular c sockets posix environment

hora - obtener fecha del sistema en dev c++



¿Cómo encuentro el nombre de host completo de la máquina actual en C(nombre de host e información de dominio)? (5)

Creo que estás buscando:

gethostbyaddress

Solo pásalo IP localhost.

También hay una función gethostbyname, que también es útil.

En un proyecto C (POSIX), ¿cómo obtengo el nombre completo para el sistema actual?

Por ejemplo, puedo obtener el nombre de host de mi máquina haciendo gethostname() desde unistd.h. Esto podría darme machine3 a cambio, pero en realidad estoy buscando machine3.somedomain.com por ejemplo.

¿Cómo hago para obtener esta información? No quiero utilizar una llamada al sistema () para hacer esto, si es posible.


La manera más fácil, prueba uname ()

Si eso no funciona, use gethostname (), luego gethostbyname () y finalmente gethostbyaddr ()

El h_name de hostent {} debería ser su FQDN


Mi solución:

#ifdef WIN32 #include <Windows.h> #include <tchar.h> #else #include <unistd.h> #endif void GetMachineName(char machineName[150]) { char Name[150]; int i=0; #ifdef WIN32 TCHAR infoBuf[150]; DWORD bufCharCount = 150; memset(Name, 0, 150); if( GetComputerName( infoBuf, &bufCharCount ) ) { for(i=0; i<150; i++) { Name[i] = infoBuf[i]; } } else { strcpy(Name, "Unknown_Host_Name"); } #else memset(Name, 0, 150); gethostname(Name, 150); #endif strncpy(machineName,Name, 150); }


Para obtener un nombre completamente calificado para una máquina, primero debemos obtener el nombre de host local y luego buscar el nombre canónico.

La manera más fácil de hacerlo es primero obteniendo el nombre de host local usando uname() o gethostname() y luego realizando una búsqueda con gethostbyname() y mirando el miembro h_name de la estructura que devuelve. Si está utilizando ANSI c, debe usar uname() lugar de gethostname() .

Ejemplo:

char hostname[1024]; hostname[1023] = ''/0''; gethostname(hostname, 1023); printf("Hostname: %s/n", hostname); struct hostent* h; h = gethostbyname(hostname); printf("h_name: %s/n", h->h_name);

Desafortunadamente, gethostbyname() está en desuso en la especificación POSIX actual, ya que no funciona bien con IPv6. Una versión más moderna de este código usaría getaddrinfo() .

Ejemplo:

struct addrinfo hints, *info, *p; int gai_result; char hostname[1024]; hostname[1023] = ''/0''; gethostname(hostname, 1023); memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; /*either IPV4 or IPV6*/ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_CANONNAME; if ((gai_result = getaddrinfo(hostname, "http", &hints, &info)) != 0) { fprintf(stderr, "getaddrinfo: %s/n", gai_strerror(gai_result)); exit(1); } for(p = info; p != NULL; p = p->ai_next) { printf("hostname: %s/n", p->ai_canonname); } freeaddrinfo(info);

Por supuesto, esto solo funcionará si la máquina tiene un FQDN para dar; de lo contrario, el resultado de getaddrinfo() termina siendo el mismo que el nombre de host no calificado.


gethostname() es la forma POSIX para obtener el nombre de host local. Echa un vistazo man .

La función BSD getdomainname() puede darle un nombre de dominio para que pueda construir un nombre de host totalmente calificado. No hay una forma de POSIX para obtener un dominio, me temo.